Skip to content

Changelog

Every fix and update to the NexusPool core, with its date.

v0.10.26.7
  • Restarts: a rig that connects while the pool is starting up now waits a few milliseconds for its work. Before, the first connections after a restart could be closed and had to reconnect.
v0.10.26.6
  • Block delivery: a block found while the pool is still retrying an earlier one now goes to the network at once. It used to wait behind the earlier block's retries, up to ten minutes when a node was down.
  • Stability: a slow disk or a stalled reporting service no longer pauses new work for the rigs. Before, a long enough stall restarted the pool. A found block is still written to disk before it is sent.
  • New jobs: rigs now receive new work in the order they connected, and each connected rig gets exactly one copy of every new job.
  • Declared jobs: a template refresh on the same block no longer replaces the job a declaring miner chose. A new block still replaces it.
  • Block records: a block accepted by several nodes now appears once in the pool's records and custody receipts, instead of once per node.
  • Stratum V2: a new job now reaches each Stratum V2 rig in a single network write instead of one per message.
v0.10.26.5
  • New blocks: rigs now start on a new block when the node sees its header, before the node finishes checking it. A block found on that early work waits for the node to accept its parent.
  • New blocks: the pool now rebuilds a fee-paying job from the previous template as soon as a block lands, instead of waiting for the node, and has a full node check each one.
  • Late solutions: the pool now checks a winning share that arrives after its job was replaced, and sends it to the network if it is a block. Stratum V2 rigs get the same check.
  • Reconnections: a rig that loses its connection after finding a block can now deliver that block when it reconnects.
  • Block delivery: when no node answers, the pool now keeps retrying a found block until one does. It also retries a block found while the node is starting up, instead of recording it as rejected.
  • Block delivery: the pool now sends each block to the network once, even when the same solution reaches it twice.
  • Share limits: the per-connection share limit now counts only shares that prove no work, so an honest rig can no longer lose a block to its own share rate.
  • Difficulty tuning: the pool now counts each Stratum V2 share at the difficulty it was mined at, so a difficulty change no longer overshoots.
  • Stratum V2: the pool used to mistake some Stratum V2 connections for Stratum V1 and leave them waiting until they timed out. It now tells the two apart from the first bytes they send.
  • Stratum V2: share refusals now carry the standard error names that V2 mining software expects.
  • Version rolling: the pool now reads rigs that roll version bits in different ways. When two readings disagree and one of them forms a block, the block wins.
  • Usernames: the pool now accepts long usernames on every share. It used to connect a rig with a long username and then refuse all of its shares.
  • Refused shares: the pool now records each refused share under its real cause instead of one generic reason, and no longer counts its own capacity limits against the rig.
  • Payouts for rented rigs: the reward now goes to the address the rig authorized last, the one the pool displays, and the custody receipt records who was paid.
  • Chain watch: the pool now records a warning when its node's chain stops advancing.
  • Stability: a restart no longer hands out work space already used, and a share check that could not run no longer affects the checks that follow.
  • The pool now judges a declared job against the template it was declared on, so a template refresh can no longer make a valid job look stale.
  • The pool now checks the transactions a miner supplies against the miner's own declaration before asking a node, and refuses a mismatch with a reason the miner can act on.
  • When a declaring connection closes, the pool now frees the unfinished declarations it held.
  • New blocks: keeping recent jobs for late solutions no longer delays the first job on a new block.
  • Many rigs: the pool now finds recent jobs at the same speed however many rigs are connected.
v0.9.26
  • Share grading: a share is now always graded against the exact block contents it was mined on. A rebuild that kept the same job identity could leave a share scored against contents no rig ever saw.
  • Share grading: asking for a different difficulty mid-session no longer rebuilds the job underneath the shares already in flight. The new difficulty is sent on its own and applies to the next job.
  • Duplicate detection: the per-job record of shares already seen no longer stops learning once it fills. Past that point a share could be sent again and counted again for the rest of that job.
  • Difficulty tuning: a rig whose recent history has gone stale now returns to a difficulty matched to what it is actually doing. It could previously stay pinned near a floor set from history that no longer applied.
  • Difficulty tuning: a rig that goes quiet no longer has its difficulty dragged down by the silence. A brief outage used to cost several shares at the wrong difficulty on the way back.
  • Difficulty tuning: the difficulty a rig is served no longer depends on how large that rig is. Small rigs were consistently served a harder target than their real rate justified.
  • Block detection: a winning share whose job rotated is no longer discarded before it is tested. The job now carries the template it was built from instead of naming it.
  • Late shares: a share that arrives late is now recorded by its actual cause instead of one word covering three unrelated situations. Nothing about how shares are credited changes.
  • Declined blocks: the two reasons a block can be declined now have separate counters instead of sharing one. An operator can tell them apart without reading process output.
  • Connection limits: the per-address connection cap is now sized from the real fleet, and every refusal is counted. Refusals used to be invisible, so a wrongly-capped rig looked like a quiet one.
  • Share handling: the per-share cost of the main mining path was cut, and the work sent on a new block is now prepared once instead of per connection. No change to what miners receive.
  • Duplicate detection: duplicate shares are now recognised by region rather than by header contents, so two regions serving the same work no longer accuse each other.
  • Stability: an unauthorised connection could make the pool emit a malformed status record. It is now rejected cleanly. No effect on mining, share accounting, or payouts.
  • A miner can now choose the transactions in its own block, and the pool mines exactly that set. Previously the pool substituted its own template, so the miner's choice was silently discarded.
  • A declared job is not accepted until a full node has judged it. The pool no longer answers "accepted" for a block no node has seen.
  • A job token is now usable only by the client it was issued to. Tokens also no longer run out under normal use.
  • A solution pushed over the declaration connection is now treated as a block and submitted, instead of being counted and discarded.
  • A declaring miner whose coinbase cannot be read is now told so, with the node's own words, instead of being asked to try again forever.
  • A rejection from the node no longer arrives as silence when its reason is long. The reason travels with the refusal so the miner can act on it.
  • A declaration whose coinbase is too large is now refused with that reason, before any of the expensive checking runs. It used to be dropped without a word, which read to the miner as the pool ignoring it.
  • Declarations are now paced per client, and a solved block is never held back by that pacing. A single client can no longer spend the whole pool's declaration capacity.
  • The pacing now follows the client rather than the connection, so reconnecting no longer hands out a fresh allowance.
  • A large declaration sent the way the protocol specifies is now read correctly. Clients that split one across several parts previously lost the session instead of having it accepted.
  • The landing page was rebuilt around verification: every claim now carries its own check, and the navigation collapses behind a single control on small screens.
  • A guided path now takes a new miner from the landing page to a correctly pointed rig, replacing a set of instructions that assumed prior knowledge.
  • Browser translation no longer takes the site down. A translated page used to blank out entirely; live figures are now marked so translation leaves them alone.
  • A failure in one part of a page no longer replaces the whole site with a black screen. The rest of the page keeps working.
  • The custody page was rebuilt so each published claim sits beside the evidence for it, instead of pointing elsewhere.
  • Support now has its own desk on the site, reachable from the four places people actually look for help.
  • A security contact is now published at the address researchers check first.
  • Search engines and AI crawlers now receive real per-page dates and a machine-readable index. Pages were previously dated by build time, which made every page look edited on the same day.
  • Signed-out readers are no longer bounced away from the receipt verifier, and the navigation search now signs you in instead of leading nowhere.
  • The connection details shown by the guided setup now match the address the landing page publishes. They could differ by region.
  • Scrolling no longer sticks on the technology page, and the footer artwork no longer competes with the page for the first seconds of a mobile load.
  • The verification key for receipts is now published where a script can fetch it, so a receipt can be checked without downloading anything from us first.
  • Pool status in the footer — height, hashrate, uptime and price — is now readable by a screen reader. It was hidden from one entirely, and it is the only copy of those figures on the page.
  • Closed answers in the frequently-asked list are now genuinely closed. A screen reader used to read every one of them aloud while the page reported them as shut.
  • The availability chart no longer places hundreds of unlabelled stops in the keyboard path. The detail behind each bar is now readable instead of silent.
  • The labels describing the connection key format now meet the contrast standard. Reading them is the step a miner takes to point a rig here, and they were too faint to pass.
  • The record of signed receipts and found blocks is now append-only at the operating-system level: it can be added to and read, never rewritten or deleted in place.
  • A copy of everything that cannot be regenerated is now captured on a schedule and sealed so that only the holder of the recovery key can open it.
  • The published head of that record is now sent to a machine outside the pool, so a change made to local history can be told apart from history itself.
  • Receipt durability: a receipt file created for the first time is now made durable together with the directory entry naming it. A power cut between the two could leave a receipt the system could not find.
  • Block quality: the pool now counts blocks it was handed with no transactions when the chain plainly had some. That situation was previously invisible.
  • Internal counters that only mean something to an operator are no longer published on the public status endpoint. They are shown in the operator view instead.
  • A miner opening its own statistics page no longer sees zero hashrate or an error. The page now answers with the figures it already had.
  • Block templates now carry a per-block fullness reading, so it is possible to see how complete the work being mined actually was.
v0.8.26.22
  • The public website now reads each region's figures with a credential that can only read them. It had been carrying the same one the operator's own tools use, which is far broader than a website needs: that credential can also make changes, and it opens operator-only views where miner addresses appear unmasked. Nothing about the site's behaviour changes (the same pages show the same numbers), but the most exposed part of the pool no longer holds a key to the parts that aren't meant to be public. No effect on mining, share accounting, or payouts.
  • The public website now runs under its own account on the machine, separate from the mining engine it sits in front of. They had shared one, and the engine's private control channel is open to anything running under that account, including a channel that can ask the engine to stop taking connections. The website has never needed it and does not use it; it talks to the pool the same way anything else does. Sharing an account meant that if the website were ever broken into, the intruder would inherit reach it was never given on purpose. Now it cannot reach it at all. No effect on mining, share accounting, or payouts.
  • A single region falling behind can no longer pull a healthy one out of the published address. The pool watches each region from outside and compares what it is serving against what the others are, and with only two regions running, one lagging region was treated as settled fact rather than one opinion among several. On the 8th of August that is exactly what happened: a region briefly behind made the check condemn a region that was working perfectly, and it tried five times to withdraw it, stopped each time only by a rule that refuses to withdraw the last one standing. An independent, non-pool view of the chain had answered the whole time, agreed with the healthy region, and was being discarded. Below a real quorum, that outside view now has to agree before a region can be withdrawn, and a disagreement means no action at all rather than action on one unverified opinion. As more regions come online the quorum forms on its own and outranks the outside view again. No effect on mining, share accounting, or payouts.
  • A region withdrawn for its own health now comes back on its own. The pool remembered that it, rather than the operator, had taken a region out of the published address, but only for as long as the watching process stayed up. If that process restarted while a region was out, it came back assuming the operator had removed the region deliberately, and deliberate removals are never undone automatically. The region would have stayed out of the address permanently, waiting on a person, with nothing said. That memory now outlives a restart. The rule it protects is unchanged: a region an operator takes down by hand stays down, however healthy it looks. No effect on mining, share accounting, or payouts.
  • The pool's status check no longer reports how many submissions it discarded and why. Those counts are meant for the operator's own diagnostics, and one region had been serving them to anyone who asked. The same check now also states which region answered, so a wrong or slow response can be traced to its source without connecting to each site by hand, and it now survives the local process restarting instead of occasionally reading everything as healthy for a moment when it was not. No effect on mining, share accounting, or payouts.
  • The standalone tool miners can run to check their own payout receipts offline, without any other pool software installed, now rejects a malformed receipt cleanly instead of risking a read past the end of its own buffer while parsing one. Found by an internal security pass rather than in the field: every one of over five thousand real receipts pulled from the live journal still verifies exactly as it did before. No effect on mining, share accounting, or payouts.
  • If the Bitcoin node behind this pool goes down, work sent to miners could keep reading as fresh indefinitely: the same block template handed out again and again with nothing on the wire to say it had stopped changing. One of the pool's other chains already caught this case; the main Bitcoin path did not. It now does, and states it plainly on the pool's own status page. The pool still serves that work rather than refuse it outright: over the short window this is measured on, the network has almost always not moved on yet, and refusing on that alone would throw away good work far more often than it would ever catch bad work. No effect on mining, share accounting, or payouts.
  • Building a payout to enough recipients at once could, past a size no release has actually reached yet, send miners a work notification built from memory that was never written, instead of the real one. The pool now checks that before sending and refuses the job outright if it ever happens, the same way it already refuses any job it cannot build correctly. No effect on mining, share accounting, or payouts.
  • Your dashboard could show itself as disconnected, zero hashrate, no workers online, even while the pool underneath kept working normally. Two unrelated causes produced the same symptom. The page's own idle-time optimization had no time limit, so under real load it could wait indefinitely for a moment that never came and never open its connection; it now gives up on waiting after two seconds and connects anyway. And roughly once every five minutes, building the pool-wide activity summary at full scale could occupy the pool's control process long enough that an unrelated routine check missed its own deadline and read as a failure; that summary now yields between each rig instead of running start to finish in one stretch. No effect on mining, share accounting, or payouts.
  • You can now check a Glass Ledger receipt yourself, right on the landing page. Load one of the pool's own, or paste in one you were given, and its signature is checked against the published authority key entirely on your device: nothing is uploaded and no address is required. The page lays out the exact bytes the pool signs, coloured by what each one is, the digest those bytes produce, and the verdict underneath, and any single byte in the payload can be edited by hand to watch the digest and the verdict both change immediately. One changed byte breaking the entire signature is the whole point of a receipt like this, and now you can watch it happen instead of taking it on faith.
  • That same verifier now holds up against a file built to break it, not only a well-formed one. Twenty-three adversarial inputs were run against the real code rather than reasoned about from the outside, and most of it already held: injected markup comes back out as inert text, oversized fields never reach the display, deeply nested input does not exhaust the stack, and a mangled signature reports itself unverifiable rather than valid. Two things did not hold and are fixed. The literal text null crashed the page outright instead of reporting an unreadable receipt. And a very large file was read entirely into memory before the size limit meant to stop that was ever checked, so the limit only ever helped after the cost had already been paid.
  • The landing page's main headline used to stay invisible until the page's interactive code had fully loaded and run, even though reading it never actually depended on that code. It now appears as soon as the page's own styling arrives, measurably sooner, with everything below it still animating in exactly as before. Display only; no effect on mining, share accounting, or payouts.
  • On phones, the landing page's animated connections map used to start loading immediately on arrival, spending part of the first couple of seconds a phone is measured on to draw something sitting below content nobody has scrolled to yet. It now waits until the page has settled before it loads, and appears a couple of seconds later exactly where it always would have, once someone is actually looking. Desktop, where it was never competing for that time, is unchanged. Display only; no effect on mining, share accounting, or payouts.
  • Your Worker Statistics page for Bitcoin now shows your rig's own recent shares as a live rhythm underneath it: one mark per accepted share at its real difficulty, a marker standing on the newest one, its height tied to how that share actually compared against the network's own target rather than a fixed scale. Beside it, the same page doubles as a live view of the mempool your next block would be built from, coloured by what it actually costs to reach the front of the queue. On a fast rig that rhythm now groups recent shares instead of only ever keeping the newest handful, so it reads correctly at several shares a second instead of visibly resetting on every poll. Display only; no effect on mining, share accounting, or payouts.
  • The pool now has an About page, along with the brand media kit its logos and assets live in for anyone who wants to reference or link the pool elsewhere.
v0.8.26.14
  • Submission replies: every submission the pool processes now gets an answer, including the ones it turns down. Until now, a submission refused by one of the pool's own limits (a submission-rate ceiling, or version bits outside the range your rig was allotted) received only a bare network acknowledgement: no acceptance, no rejection, no reason. From the rig's side that is indistinguishable from a pool working perfectly, so firmware that trips one of those paths on every submission can mine into nothing for hours while its own screen still reads normal. One rig did exactly that for thirty hours before anyone noticed, and it would have kept going. Every refusal now names its reason on the wire, so a rig, or you reading its log, can tell working apart from shouting into a void. Nothing that was credited before is credited differently, and nothing that was refused before is accepted now: the only change is that the pool stops going quiet.
  • Share accounting: your rejected count now means rejected. It had been carrying three different outcomes added together under one label: genuinely rejected work, work that arrived too late to count, and work below the difficulty you were assigned. An ordinary difficulty adjustment, which costs you nothing at all, read exactly like a real problem. Rejected, stale, and below-difficulty are now three separate figures, and the previous combined total is still published under a name of its own, so nothing you were already tracking disappears from under you. Presentation of existing numbers only; no share was counted differently before or after this change.
  • Hashrate accuracy: short-window hashrate figures no longer read low. The calculation divided your submitted work by a span measured from your first submission to your last, which is by definition shorter than the window being reported. With only a handful of submissions in view, that understated the result, and the fewer the submissions the worse it got. The span is now corrected for that gap. Figures during your first minutes on the pool deliberately still behave as before: while a window is filling, it should report the work actually seen rather than a projection of it. Display only; no effect on mining, share accounting, or payouts.
  • The live connections globe on the landing page now shows the whole pool instead of only Bitcoin. It drew Bitcoin's miners and network peers and nothing else, so a pool serving three chains looked like a pool serving one. Every chain is now on the one globe, each with its own colour and its own shape so no two layers can be mistaken for each other: Bitcoin in mint and amber, Bitcoin Cash in rose, Litecoin and Dogecoin in silver. The tally underneath adds up all of them rather than reporting Bitcoin's alone. Dogecoin deliberately has no layer of its own: it is mined on the very same connection as Litecoin, so drawing it separately would show rigs that do not exist. The pool's own sites are named on the globe now as well, Los Angeles and the second one in Chicago, with an arc drawn between them, so the path your work can take across the pool's regions is something you can see rather than something you have to be told. A site that cannot be reached simply doesn't appear; it never blanks the rest of the picture. Display only; no effect on mining, share accounting, or payouts.
  • Pool statistics: the worker counts and best-share figures on the pool leaderboards now count only rigs that are actually online. A rig you renamed, retired, or replaced left its old entry behind permanently, and those entries were still being folded into that address's totals. An address could appear with more workers than it runs, with a best share belonging to hardware that has been gone for months. The leaderboards now apply the same freshness window the rest of the statistics already used. Display only; no effect on mining, share accounting, or payouts.

Page 2 of 8 · v0.10.26.7 – v0.8.26.14

Changelog: earlier releases, page 2 of 8 · NexusPool