Proposal “c2pool-daemonless-finalize“ (Active)Back

Title:Finish c2pool's daemon-less Dash node
Owner:frstrtr
Monthly amount: 126 DASH (8389 USD)
Completed payments: no payments occurred yet (2 month remaining)
Payment start/end: 2026-09-05 / 2026-11-04 (added on 2026-08-19)
Final voting deadline: in 1 month
Votes: 109 Yes / 36 No / 0 Abstain
Will be funded: No. This proposal needs additional 238 Yes votes to become funded.
Manually vote on this proposal (DashCore - Tools - Debugconsole):
gobject vote-many fa758340f1bd2391d17bb43667f76c5d9070d737b68e018e42ed75b09c6ba631 funding yes

Please login or create a new DashCentral account for comfortable one button voting!

Proposal description

c2pool is a mining pool for Dash with no operator. It pays miners from the coinbase of the blocks they find, the way p2pool does, so nobody holds anyone else's coins.

   c2pool is a new node, written from scratch in C++. It is not the old Python p2pool with a daemon-less patch. The Python p2pool proved the coinbase-payout model works on Dash. c2pool re-implements that model, and the whole Dash consensus, as one C++ program that needs no separate daemon. The Python line is a separate, older codebase; the code this funds is the C++ one at github.com/frstrtr/c2pool.

   Dash had a p2pool once. It was left behind around dashd 0.18 and no longer works with the network. I brought it back. It runs on current Dash and has been finding blocks since height 2387690, on 2025-12-13. It puts the old P2Pool-Dash marker in the coinbase, so block explorers already list these blocks with no change on their end.

   The pool runs at dash.voidbind.com. Its blocks carry a coinbase marker, so explorers attribute them: mnowatch.org/blocks/?search=c2pool lists the blocks it has found on Dash mainnet, and chainz.cryptoid.info/dash/extraction.dws?30.htm shows the coinbase extraction.

   A pool like this still runs a full Dash Core to build its templates, hold its mempool, and send out the blocks it finds. That is the last part I depend on, and I have been taking it out. c2pool now works out the masternode list, the quorums, the ChainLocks, the credit pool and the DIP-4 coinbase from the Dash P2P network by itself, and builds a template equal to the one Dash Core would build, with no dashd running.

   It holds its own mempool the same way. It takes transactions off the network, checks them and prices them against its own UTXO set, with nothing to ask. The result is the same mempool Dash Core has.

   It sends its own blocks as well. When it finds one it puts it on the Dash P2P network and passes it to other c2pool nodes over their own link. dashd is left in as a fallback only. The engine is C++ and is paid for by an Anthropic open-source grant. That grant covers the engine. I am asking the treasury only for the Dash-specific part that is left, so the outside money is already spent on the rest.

Done so far, with no Dash funding:

  •   A full C++ reimplementation from scratch, not a fork of the Python p2pool.
  •   Masternode list and quorums taken from P2P, not RPC.
  •   PoSe bans and revivals, rotated quorums, ChainLock checks.
  •   Credit pool followed and the DIP-4 coinbase built. These blocks are accepted on mainnet.
  •   Mempool held and priced by the node, equal to Dash Core's.
  •   Blocks sent over P2P and to other c2pool nodes, dashd only as a fallback.
  •   The node checks its own template and will not mine rather than pay a wrong coinbase.
Why this matters to masternodes (MNO) and evonodes (EVO)

   Your collateral is worth what the chain's security is worth, and that security rests on mining staying spread out. When mining collects into a few custodial pools, pools that can be leaned on or taken down, the whole network is exposed, and every masternode carries that risk. An operator-less pool that anyone can run, with no daemon and no custody, keeps mining in many hands. That is a direct defense of what you have staked.

   It also keeps the reward steady. More independent miners means blocks keep coming from many sources instead of one, so the payments masternodes and evonodes live on do not ride on any single operator staying online. And the node works out the masternode list, the quorums, and the ChainLocks for itself, so it stands on the same security you already provide instead of leaning on it.

Left to do, which this pays for:


  •   Put the mempool's fee-paying transactions in the template at the same fees Dash Core would take.
  •   Make a cold start as fast as a Dash Core resync.
  •   Take the last of dashd out of the running nodes.
  •   Fix the docs. dash.org and the p2pool link in Dash's own GitHub still point at the dead 0.18 pool. They should point at this one.
  •   Harden it and put out signed builds, so anyone can run a Dash pool with no daemon.

I ask for 125.5 DASH per superblock, twice. 251 DASH in total.

   Pay to XdgF55wEHBRWwbuBniNYH4GvvaoYMgL84u, the pool's own address. Every block the pool finds puts a small output there already, so the work and the funding sit on one address you can check.

  • Forum: https://www.dash.org/forum/threads/pre-proposal-c2pool-for-dash-%E2%80%94-finalizing-the-embedded-daemon-less-node-anthropic-oss-grant-matched.69511/
  • Code: https://github.com/frstrtr/c2pool
  • Pool: https://dash.voidbind.com

Show full description ...

Discussion: Should we fund this proposal?

Submit comment
 
3 points,1 day ago
Two pools build three of every four Dash blocks. Over the last 4,018 blocks, Aug 29 to Sep 5, the top producer had 38%, the top two 74%, the top three 89% (insight.dash.org, coinbase tags). Every miner on those pools trusts one operator's node for the template and the payout.

ChainLock does not change this. It settles finality and removes reorgs. It does not decide who builds the block or what is in it. It finalizes whatever the builder made.

c2pool changes the builder. Each miner's own node builds and validates the block. The coinbase pays every contributor from a shared sharechain. No operator holds the hashrate or the payout, and nothing enters a block without the miner who finds it consenting — no operator can insert a transaction or hold one out. Until now that node still needed a trusted dashd. This proposal removes it. One binary, no full node to trust. A miner can leave a 38% pool without joining another operator. A miner c2pool node owner controls the pool's fee, making him decide to set the fee for other miners willing to mine on his node and redirect it to his own mining or dedicated fee address. Every miner can have his own c2pool node instance, aggregating all sharechain hashrate, but controlling pool fees and block template transactions to include or not.

The node does what dashd did, from the Dash P2P wire. It keeps its own UTXO set and mempool. It derives the masternode list from DIP3 special transactions and checks the derived root against the root every block commits to. It verifies ChainLock signatures against the quorums it derived. It builds the template, picks the masternode payee, assembles the coinbase. No RPC is called.

This works today. Block 2526820, Aug 23, was built and paid by this pool's node this way. A dashd ran on the host as a standby and was not called for the template, the payee or validation. The block was ChainLocked. The derived masternode-list root has matched the committed root at every block since the node's anchor. This pool found 12 of those 4,018 blocks. mnowatch.org/blocks/?search=c2pool lists them.

DASH has risen past $60 since this was submitted. That is the argument for it. A network worth more is more worth mining without a trusted operator. The ask is 251 DASH: 125.5 per superblock, twice. It was fixed Aug 19 at about $7,500 (2 x $3750), priced in DASH and not adjusted, so the same amount is about $16,600 today. It is paid once, only if the tests pass, and it is about one month of one full-time engineer.

The work is seven items, each with one public test that anyone can check.

1. Production nodes run with no dashd. No dashd on the serving node since Aug 14; daemonless serving is the binary default. Test: 14 days on both production nodes with no dashd process, at least 3 mainnet blocks found and ChainLocked in that window, listed at mnowatch.org.

2. Superblock coinbase built without dashd. Governance-object sync over the Dash P2P wire is done; a node has already synced the superblock trigger with no dashd. Test: before block 2542248 is mined, this node's superblock coinbase — payees and amounts — is posted here; after it is mined, the on-chain payouts match it byte for byte. Repeated at 2558864.

3. Fee capture equal to Dash Core. Own mempool and UTXO fee pricing; inputs older than the node's UTXO horizon are excluded, under 0.05% of fees. Test: the node's UTXO set at the tip has the same hash_serialized_2 as Dash Core; over 1,000 blocks the template's fee total is at least 99.9% of Dash Core's on the same tip.

4. Cold start. Parallel header fetch, archival-peer acquisition, incremental masternode-list merkle, a compiled anchor. Test: a fresh data directory serves its first template within 60 minutes from the anchor; a full self-derive from DIP3 with no anchor completes within 24 hours, with the derived masternode-list root equal to the committed root at every block.

5. Dash P2P self-sufficiency. Open: stale seeds, no inbound listener, IPv4 only, wrong reported external IP, compact blocks not yet consumed. Test: a fresh node with no addnode reaches at least 8 peers from DNS seeds within 60 seconds, appears as an inbound peer in a Dash Core getpeerinfo, listens on IPv6, and adopts a new tip from a compact block in one round trip.

6. A pool with more than one node. The production nodes share one sharechain; won blocks are rebroadcast, PPLNS pays per share, the sharechain has an explorer. Test: a fresh node with default settings joins the public sharechain within 10 minutes; a block found by one node pays a miner on another by PPLNS, checked against the on-chain coinbase; the block is rebroadcast by at least two nodes.

7. Builds and documentation. v0.2.7 is released. Test: a tagged release with signed per-platform checksums; c2pool-dash --run --address X on a fresh machine produces work with nothing else installed; a pull request to dashpay/docs replacing the dead 0.18 p2pool link.

The first payment (superblock 2542248) covers items 1, 2 and 4. The second payment (superblock 2558864) covers 3, 5, 6 and 7. If the first-payment tests are not public and passing before the October vote cutoff, vote no on the second payment. Then it does not happen.

Already shown, at no cost to this budget: because the miner builds the block, it can include a transaction the rest of the network will not relay — one that pays no fee, or that sweeps dust — with the miner's explicit consent. Block 2518186 gathered about 1,040 dust donation inputs into the chain at zero fee, in transactions no other node would relay. That is the same power a centralized pool operator holds over content, placed instead in the hands of the miner who finds the block.
Reply
3 points,14 days ago
This is great! I will be voting for this.
Reply
3 points,5 days ago
Many thanks. mnowatch is actually where these blocks surface! mnowatch.org/blocks/?search=c2pool lists what the pool has found, so your service is already doing the attribution for them. Good to have you following it. Happy to answer anything about how the daemonless node builds its templates.
Reply