Open alpha·Expect rough edges. Found a bug?DM @icaruswings ↗
← back home
how it all works

The docs.

A directory of Bitcoin solo-mining dens. Find one, point your hardware at it, and chase blocks together. Payouts land directly in the coinbase, so there's no platform balance to trust.

I want to
Mine in a den
Pick a den, plug in your Bitaxe, get your share of every block it finds.
Read the steps →
I want to
Run my own den
Spin up a group with your own fee, payout rule, and (optionally) node policy.
Read the steps →

In a nutshell

A directory of Bitcoin solo-mining groups — we call them dens. Operators run a den, miners point their hardware at it, and when the den finds a block, payouts land in each member's BTC address directly through the coinbase transaction.

No platform balance. No operator IOU. No opaque ledger. Identity is Nostr (NIP-07 sign-in). Custody is on-chain. Operators pick their own fee. The platform takes 0.5% on top, written into every coinbase.

Mining in a den

Four steps from "I want to mine" to "I'm mining". You need a Nostr signer and any stratum-compatible hardware.

  1. 1
    Get a Nostr signer
    Install a NIP-07 signer. On desktop that's Alby or nos2x. On mobile, anything that supports NIP-46 remote signing.
  2. 2
    Pick a den you like
    Browse the dens directory and find one whose payout rule, fee, and operator you trust.
  3. 3
    Register
    Click Join this den and sign a kind-30078 registration with your BTC address (where your share of any coinbase lands) and a Lightning address (used when your share is too small to send on-chain).
  4. 4
    Point your hardware
    Plug these into your Bitaxe (or whatever stratum client you use):
    Stratum URL:  stratum.hashden.app
    Stratum port: 3333
    Stratum user: <slug>.<your-npub>.<worker-name>
    Stratum pass: x   (anything; not validated)
    Your npub1… is the bech32 public key shown in any Nostr client (also accepted in 64-char hex form). Shares show up live on the den's page.

Running a den

Operators run the den, set the rules, and decide where the block templates come from. Members join, mine, and get paid through the coinbase. No funds touch you.

  1. 1
    Sign in and create the den
    Sign in with NIP-07 and open Create a den. You pick a slug, a fee (basis points, so 200 = 2%), and a payout rule (solo-showcase or PPLNS, see below). Your BTC address gets the operator fee and the dust-bucket outputs, so use one you control. Ideally a hardware wallet.
  2. 2
    Pick a template source
    Leave PLATFORM_DEFAULT on (Hashden's Bitcoin Knots node) unless you want to run your own policy. Switch to OPERATOR_RPC for DATUM, Libre Relay, a custom Knots config, whatever. Paste an RPC URL and auth. We encrypt the credential at rest.
  3. 3
    Add a Lightning wallet (optional)
    Recommended for PPLNS dens. Members whose share is too small to send on-chain get paid in Lightning from your wallet. Paste an LNbits admin key or an NWC connection string. Encrypted at rest.
  4. 4
    Invite miners
    Share your den's URL. Miners onboard through the steps above.

Payout rules

Two flavours. Pick one when you create the den. You can change it later in settings.

Solo-showcase
winner takes the block
If your hardware finds the block, you get the full reward (~3.125 BTC at current subsidy), minus the operator's fee and the 0.5% platform fee. The rest of the den gets nothing for that block. They're there to showcase the den, not split the reward. Good fit for hobbyist groups where finding a block at all is the whole point.
PPLNS
pay per last N shares
The reward splits across everyone whose shares landed in a recent window. Your weight = your share count. Above-dust amounts go on-chain in the coinbase. Sub-dust amounts get paid in Lightning shortly after the block matures. Good fit for groups that take it more seriously.

Either way, the on-chain coinbase is the source of truth. Anyone can check who got what on-chain, and there's no platform-side ledger to trust.

What happens after a block

  1. 1
    Coinbase gets built
    The stratum routes the winning share and builds the coinbase with the right outputs: winner, PPLNS members, operator fee, platform fee, and the dust bucket.
  2. 2
    Block is broadcast
    Hashden records it as FOUND. The celebration banner appears on the den page.
  3. 3
    It matures
    After 100 confirmations (~16h on average), the maturity watcher flips status to MATURED. On-chain outputs are now spendable by their recipients. Nothing else needs to happen.
  4. 4
    Dust gets fanned out
    For PPLNS dens, the dust-fanout worker pays each below-dust member via the operator's Lightning wallet. Hashden writes a NIP-57 zap receipt for every payment as a public audit trail.
  5. 5
    (Rarely) reorg
    If the block gets reorged out before maturity, status flips to ORPHANED. No payouts happen for that block. The block at the same height on the new mainchain is the one that paid (probably another pool).

What it costs

Platform fee
0.5%
Of every block reward. Sent to a multisig cold address the project controls.
Operator fee
set by operator
Picked at den creation, usually 1 to 3%. Goes to the operator's BTC address as a coinbase output.
Lightning fees
come out of dust
Routing fees for dust fan-out come out of the dust bucket itself, not anyone's share.
Stratum / API / hosting
free
Running costs are covered by the platform fee.

What's private and what isn't

Hashden tries to expose the bare minimum needed to make a mining pool work. Here's what other members, operators, and random visitors can and can't see about you.

IP address
visible to: Nobody
The stratum never logs your IP or stores it in any table. Connection diagnostics use the random session id only.
Mining hardware (user-agent)
visible to: Nobody
The stratum doesn't store your bitaxe/cpuminer fingerprint per-session. Aggregate hardware stats are anonymized.
Lightning address
visible to: Platform only
Used server-side by dust fan-out. Never returned from any read API. Other members and the operator can't see it.
BTC payout address (before a block is found)
visible to: Nobody
Coinbase previews show member share weights but redact the actual payout addresses. They only become visible on-chain, the moment a block is mined.
BTC payout address (after a block is found)
visible to: Everyone (on-chain)
The coinbase transaction is public on the Bitcoin blockchain. Once the block is mined, every output is forever visible to anyone who looks at the chain.
Nostr pubkey (npub)
visible to: Opt-in
Anonymized by default. Read endpoints (shares, payouts, blocks, coinbase preview) return a stable per-den id like `anon-1a2b3c4d` instead of your npub. Toggle to `public` per-den on /me to publish your npub against your contributions instead. The id is stable within a den so leaderboards keep working, but unlinkable across dens (same person → different ids in different dens).

What the operator sees: exactly the same things any other visitor sees. There's no privileged "operator dashboard" that reveals member IPs, hardware, or lightning addresses — the den operator queries the same public API as everyone else.

What the platform sees: the platform stores rows in Postgres for membership, shares, blocks, and payouts. The platform admin can read those rows directly (e.g. to debug a failed payout). This is a structural property of any hosted service. Plans to make this verifiable (operator-run stratum, members-as-relays) are on the roadmap, not in the alpha.

What Nostr relays see: joining a den publishes a kind-30078 signed event with your pubkey and the den's slug. Anyone scanning relays can enumerate members of public dens regardless of what this site shows. Unlisted dens still publish the same event; "unlisted" only hides them from this site's directory.

When things go wrong

  • Bitcoin node outage: if the platform's Bitcoin node goes unreachable, the stratum's circuit breaker kicks in and templates pause. Mining keeps queueing and picks back up once the node is reachable again.
  • Operator's LN wallet down: dust fan-out for that operator's dens stalls. Reconcile-on-restart catches partial payments. No double-pays.
  • Block reorged: very rare. The block goes ORPHANED and payouts skip. Nobody got paid for that height because the chain reorganized them out.
  • Lightning address dead: dust payments fail and stay FAILED in the audit trail. The member can fix their address by re-running the join flow.
  • Knots policy divergence: the platform's default template comes from Knots. If Knots changes its tx filters in a way you disagree with, switch your den to OPERATOR_RPC and run your own node policy.

Get in touch

Bugs, ideas, weird edge cases, or just want to say hi: DM me on Nostr at @icaruswings or open an issue on GitHub. It's open alpha and a one-person project, so replies may take a day or two.