Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
a14ac25
feat(cuda): working, byte-correct NVIDIA CUDA x16rs miner
Moskyera Jul 21, 2026
8e965e8
feat(cuda): NVIDIA CUDA miner-panel integration + Windows-nvcc portab…
Moskyera Jul 22, 2026
fe2a7f6
feat(panel): backend dropdown, drop RDNA4 notes, de-em-dash UI text
Moskyera Jul 22, 2026
037bde3
fix(panel): always write the mainnet [node] section into hacash.confi…
Moskyera Jul 22, 2026
ab167a3
feat(pool): all-in-one public free-IP pool (hac-pool) + panel hosting
Moskyera Jul 22, 2026
1cbc08d
feat(panel,cuda): pool directory, CUDA PTX forward-compat, honest poo…
Moskyera Jul 22, 2026
640b94a
feat(pool): P1.0 spike — off-node block with chosen coinbase, accepte…
Moskyera Jul 23, 2026
fef8da4
feat(pool): P1 settlement proof — one signed tx pays N recipients fra…
Moskyera Jul 23, 2026
0f85479
feat(pool): pool_core accounting brain — share target, PPLNS, exact p…
Moskyera Jul 23, 2026
bf0d962
feat(pool): working end-to-end pool — work, shares, PPLNS, blocks, pr…
Moskyera Jul 23, 2026
d960afc
feat(pool): real pool wallet from a key file instead of a hardcoded t…
Moskyera Jul 23, 2026
914049b
feat(pool): serve the standard miner API — an unmodified poworker min…
Moskyera Jul 23, 2026
9f4988a
feat(pool): workers announce their payout address — fully automatic p…
Moskyera Jul 23, 2026
dcae2ad
feat(pool): off-node ASERT difficulty — the pool can now build mainne…
Moskyera Jul 23, 2026
3717828
feat(pool): harden for real miners — dedupe, persistence, reorg-aware…
Moskyera Jul 23, 2026
8801246
feat(pool): asert-check — validate off-node difficulty against real c…
Moskyera Jul 23, 2026
d956601
feat(panel): pool payouts need no extra step — the wallet address is …
Moskyera Jul 23, 2026
0f92e90
feat(panel): simple view for newcomers, three steps and one button
Moskyera Jul 23, 2026
8adf7d7
fix(pool,panel,cuda): address the adversarial review — money, concurr…
Moskyera Jul 23, 2026
69d5367
fix(pool): pre-release hardening round 2, plus HBIT block tag
Moskyera Jul 23, 2026
630ceb6
fix(miner,pool): production hardening for 24/7 real-money operation
Moskyera Jul 23, 2026
68c8a4b
fix(miner): resolve re-check findings R2-R6
Moskyera Jul 23, 2026
0d70baf
fix(cuda): use runtime cudaGetDeviceProperties for the device name
Moskyera Jul 24, 2026
89cbfb8
build: use thin LTO for the release profile
Moskyera Jul 24, 2026
2e1726c
test(cuda): add Google Colab T4 smoke-test scripts
Moskyera Jul 24, 2026
4cbc990
fix(pool,miner,node): second full audit pass, 103 fixes for real-mone…
Moskyera Jul 24, 2026
828dfcb
fix(miner,pool): mainnet diamond rules, block miner correctness, and …
Moskyera Jul 25, 2026
db123f8
fix(miner,pool,config): five critical defects found auditing the last…
Moskyera Jul 25, 2026
059e082
fix(miner): stop submitting winners a height can no longer accept
Moskyera Jul 25, 2026
730e65b
fix(miner): teach the submit gate that a pool speaks a different dialect
Moskyera Jul 25, 2026
728d1a9
fix(node,pool): /submit/transaction reported success before the node …
Moskyera Jul 25, 2026
df77705
docs(colab): correct the payout note after the submit_transaction roo…
Moskyera Jul 25, 2026
7cc1213
fix(pool): mine the node's transactions, not just a coinbase
Moskyera Jul 25, 2026
324deec
fix(pool): test-miner spun on one nonce and blamed the wrong thing wh…
Moskyera Jul 25, 2026
94871e9
fix(pool): test-miner wrote a log line per submission with no bound
Moskyera Jul 25, 2026
165a3ef
feat(pool,panel): the pool states its real terms, and the miner sees …
Moskyera Jul 26, 2026
723c1e3
refactor(pool): the pool is called HBIT, so name it that
Moskyera Jul 26, 2026
68cc4f3
feat(release): ship HBIT so a person can download it and run it
Moskyera Jul 26, 2026
36e5374
refactor(release,panel): the pool is the operator's own service, not …
Moskyera Jul 27, 2026
5966a41
feat(deploy): run HBIT as a service on a VPS or mini PC
Moskyera Jul 27, 2026
684b23a
fix(miner): a GPU batch finds thousands of payable shares and reporte…
Moskyera Jul 27, 2026
0c147a7
fix(cuda): port the proven multi-share fix, so an NVIDIA card is paid…
Moskyera Jul 27, 2026
1069f05
fix(colab): the CPU rival was loading the GPU config, which would hav…
Moskyera Jul 27, 2026
8f5e826
fix(colab): start the pool only once the chain has a difficulty worth…
Moskyera Jul 27, 2026
51882d0
fix(colab): wait for the condition the pool actually checks, not a gu…
Moskyera Jul 27, 2026
2292c66
docs(colab): correct the bootstrap target value stated in the warm-up…
Moskyera Jul 27, 2026
c43beb8
fix(colab): make the warm-up config swap survive a failed run
Moskyera Jul 27, 2026
f605fda
fix(colab): the rival was loading the GPU config, and the guard was r…
Moskyera Jul 27, 2026
9569a61
fix(colab): repair the newline escape that broke the rival guard's me…
Moskyera Jul 27, 2026
05a88a7
fix(colab): kill the pool by its real process name, and always tear down
Moskyera Jul 27, 2026
887005b
fix(pool): refuse a share that costs nothing, not merely one with a b…
Moskyera Jul 27, 2026
524ae03
fix(colab): measure against mainnet, because a local testnet cannot a…
Moskyera Jul 27, 2026
0e5de05
fix(miner): the undersampling warning told operators to make the prob…
Moskyera Jul 27, 2026
07a3196
docs(colab): state the measured chain data size for the sync cell
Moskyera Jul 27, 2026
11c8814
docs(colab): drop a stale comment about a warm-up phase that no longe…
Moskyera Jul 27, 2026
c699cc3
docs(colab): record the NVIDIA result, and what it does not cover
Moskyera Jul 27, 2026
37f7de4
fix(deploy): pick share_bits from the measured chain, not from a guess
Moskyera Jul 27, 2026
c475209
fix(deploy): cap compiler parallelism so the image can be built at all
Moskyera Jul 27, 2026
06dcd98
fix(docker): exclude build directories that are not called "target"
Moskyera Jul 27, 2026
9ded0ea
fix(opencl): the tool for diagnosing a missing driver crashed on a mi…
Moskyera Jul 27, 2026
9ddda60
chore: 0.5.0
Moskyera Jul 27, 2026
5333b6a
fix(release): unbreak both halves of the release build
Moskyera Jul 27, 2026
584664d
fix(pool): stop refusing to write the wallet because the OS can read it
Moskyera Jul 27, 2026
a956fe1
feat(panel): measure whether the node is actually caught up
Moskyera Jul 27, 2026
366fbe6
feat(panel): a way to give the node and miners a visible console
Moskyera Jul 27, 2026
d361ec3
feat(panel): wait for the node to catch up, and show how far it has got
Moskyera Jul 27, 2026
3f028d4
fix(node): catch up in batches when the gap is too deep for the hash …
Moskyera Jul 27, 2026
b5b4146
fix: stop shipping fast_sync = true, it builds a chain that cannot be…
Moskyera Jul 27, 2026
5f5c15b
feat(panel): give the node and the miners their own console windows
Moskyera Jul 27, 2026
6b466f7
fix(panel): the reaper test needs Stdio on every target
Moskyera Jul 27, 2026
5cd3a4e
chore: 0.5.1
Moskyera Jul 27, 2026
e6f1230
feat(release): ship the HBIT pool binaries alongside the miner
Moskyera Jul 27, 2026
731d568
feat(release): make the pool package actually deployable
Moskyera Jul 27, 2026
206191a
chore: 0.5.2
Moskyera Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Without this file `docker build .` sends the whole working tree to the daemon.
# Measured here: 113 GB of build context, which took nearly two hours and then
# killed the daemon. The image needs the sources and nothing else; every build
# artifact it needs is produced inside the builder stage.

# Rust build output. This is the one that matters: it is almost all of the 113 GB.
# target2 is a second build directory that exists here and is another 188 MB.
target/
target2/
*/target/
**/target/

# Build directories from tooling that names them something other than "target".
# The patterns above match a directory CALLED target, so they missed
# .codex-target-security-20260719-reaudit entirely: 3.5 GB of compiler output
# that went on being uploaded to the daemon on every build, 198 seconds of it.
# Anything with "target" in the name is compiler output, wherever it sits.
.codex-*/
*target*/
**/*target*/

# Packaged releases and their staging directories. Deliberately broad: this tree
# has accumulated dist, dist-final-*, dist-opencl-upgrade-* and will accumulate
# more, and each is tens of megabytes of already-built output the image rebuilds
# from source anyway.
dist*/

# Vendored Colab upload snapshots: a whole second copy of the app tree plus
# prebuilt artifacts, 36 MB, none of which the build reads.
scripts/mining-nvidia/colab-upload/

# Git history. The build reads no VCS metadata.
.git/
.github/

# Local test rigs, chain data and wallets. None of this belongs in an image, and
# a wallet key reaching a layer would be a leak that survives every later layer.
**/hacash_mainnet_data/
**/hacash_testnet_data/
**/*.key
**/*.key.*
deploy/secrets/
*.log
*.err
*.out

# Editor, OS and tooling noise.
.vscode/
.idea/
.grok/
.claude/
Thumbs.db
.DS_Store

# The prebuilt Windows toolchain vendored for local builds. The image is Linux.
.tools/
osxcross/

# Docker's own files: changing the compose file must not invalidate the build
# cache for the source layers.
deploy/docker-compose.yml
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Every action in .github/workflows is pinned to a 40-hex commit SHA. A pin does
# not follow upstream security fixes, so let Dependabot raise the pin instead of
# letting it rot.
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
200 changes: 180 additions & 20 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,23 @@ hacash_*
!scripts/mining-amd/presets/diaworker/
!scripts/mining-amd/presets/poworker/
!scripts/mining-amd/presets/**/*.ini
# Same rule for the shipped config TEMPLATES. The blanket *.ini above is meant to
# keep an operator's own filled-in config (with their address and passwords) out
# of the repo, but it was also swallowing the templates the docs tell people to
# copy, so those never reached a clone or a release. These carry no address, no
# password and no machine-specific path: every such key is left commented out on
# purpose, so the strict loader fails loudly and names the key instead of letting
# anyone mine to a value they did not choose.
!mainnet-configs/*.ini
!miner-pool/hac-pool.example.ini
!hbit-pool/hbit-pool.example.ini
!deploy/node/hacash.config.ini

# The pool's wallet passphrase lives here at deploy time. It must NEVER be
# committed: it is one half of the wallet, and the key file is the other. This
# is listed AFTER the negations above on purpose, so nothing can re-include it.
deploy/secrets/

*.exe
*_ubuntu
*_windows
Expand Down
Loading
Loading