drillhash.com is not publishing the blocks its miners find
We connected four NEXA mining machines to drillhash.com and watched every share they sent in. In 35 hours one of them found a real block, the thing miners get paid for. drillhash.com accepted it, and the block never appeared on the Nexa network. Nobody was paid for it.
What we did
You know the deal as a miner: your machine sends shares to the pool all day, and every share is a lottery ticket. Most of the time a share is just proof that you are working. Once in a while a share is good enough to be a block. That is the moment the pool exists for. It has seconds to publish that block on the Nexa network, the block reward lands in the pool's wallet, and the pool splits it among everyone who sent shares. No published block, no reward, nothing to split. A pool's dashboard shows hashrate and shares, but the blocks it has published on the network are what actually pay you.
drillhash.com has shown a lot of NEXA mining power for weeks and has reported no blocks at all. We wanted to know for sure, so we tested it. We placed a small piece of software between four mining machines and drillhash.com. It changes nothing: every message goes through untouched, and drillhash.com sees the machines exactly as if they had connected directly. But it keeps a copy of every share and checks its quality itself, using the same rule the Nexa network uses. It also writes down what drillhash.com answered.
If a share is good enough to be a block, it is a block. It does not matter what the pool says about it afterwards. That is the whole test.
What we found
On 21 September 2026 at 01:40:48 UTC, the miner nexa:nqtsq5g5nwxfq4n4z7tmw06wyxrfyg90lyu3v8mx4ntm3t6z sent in a share that was 2.31 times better than needed for a block. Its winning guess, the nonce, was 59617ba000002501e1ebca4b83aa61da. drillhash.com answered "accepted". That block should have appeared on the Nexa network moments later. It never did. The next block on the network came nine minutes later, found by somebody else.
The block, exactly as we recorded it
The raw details, exactly as recorded, so that anyone who wants to can check our work.
- time
- 2026-09-21 01:40:48 UTC
- pool
- drillhash.com:3500
- wallet
- nexa:nqtsq5g5nwxfq4n4z7tmw06wyxrfyg90lyu3v8mx4ntm3t6z
- worker
- 10x147
- job id
- 7fe5b3f8
- header commitment
- 9dd99b372c9b698589fd92fe0dd4a02e422029d18b1599400549a8e3f4d6daac
- nonce
- 59617ba000002501e1ebca4b83aa61da
- nbits (target set by the pool's own job)
- 1b00f7f5
- difficulty needed for a block
- 2.906052e+14
- difficulty of this share
- 6.712071e+14
- how good it was
- 2.31 times what a block needs (1 or more is a block)
- was the work current?
- yes, it was for the job drillhash.com had just handed out
- drillhash.com's reply
- accepted, no error
What the Nexa network shows for those minutes
Every block on the network is public, numbered, and carries the nonce, the winning guess that made it. Our block was found between block 1152476 and block 1152477. Here are the blocks around that time, straight from the public Nexa explorer. Our winning guess is not in any of them, nor in any block since.
| block number | time | target | nonce |
|---|---|---|---|
| 1152475 | 01:39:05 | 1b00f7c1 | 3f18d4b300001d00f7120b0000000000 |
| 1152476 | 01:39:23 | 1b00f7f5 | 3d04f4ba00007206bbe3dbca643bf706 |
| 1152477 | 01:50:04 | 1b00f7db | 057678e00000b7080ff2377942d4c74b |
| 1152478 | 02:04:27 | 1b00f860 | c74ec13a00002200756f0b0000000000 |
Our block: 01:40:48, nonce 59617ba000002501e1ebca4b83aa61da. Not on the network.
The whole test on one picture
Each dot is one of the best shares our machines sent to drillhash.com over the 35 hours. The higher a dot, the harder the share, and the closer it came to being a block. The dashed line is the network difficulty, the bar a share has to clear to be a block. There is exactly one dot above the line, and that block was never published.
Show the same data as a table, hour by hour
| hour | shares sent | best share difficulty | network difficulty |
|---|---|---|---|
| 19 Sep 18:00 | 1,289 | 16.0 T | 267.4 T |
| 19 Sep 19:00 | 2,879 | 46.7 T | 268.7 T |
| 19 Sep 20:00 | 4,050 | 8.7 T | 269.5 T |
| 19 Sep 21:00 | 2,412 | 26.2 T | 269.7 T |
| 19 Sep 22:00 | 2,197 | 3.6 T | 270.2 T |
| 19 Sep 23:00 | 2,246 | 12.3 T | 271.8 T |
| 20 Sep 00:00 | 2,199 | 9.4 T | 274.1 T |
| 20 Sep 01:00 | 2,221 | 17.4 T | 275.0 T |
| 20 Sep 02:00 | 2,107 | 246.3 T | 274.8 T |
| 20 Sep 03:00 | 2,172 | 4.9 T | 274.9 T |
| 20 Sep 04:00 | 2,212 | 4.7 T | 277.0 T |
| 20 Sep 05:00 | 2,289 | 6.1 T | 279.2 T |
| 20 Sep 06:00 | 2,267 | 10.5 T | 280.2 T |
| 20 Sep 07:00 | 2,161 | 4.9 T | 280.9 T |
| 20 Sep 08:00 | 3,301 | 19.0 T | 281.6 T |
| 20 Sep 09:00 | 4,246 | 15.7 T | 283.5 T |
| 20 Sep 10:00 | 3,723 | 56.0 T | 286.0 T |
| 20 Sep 11:00 | 4,309 | 46.7 T | 286.2 T |
| 20 Sep 12:00 | 4,452 | 23.1 T | 285.8 T |
| 20 Sep 13:00 | 5,072 | 54.4 T | 285.3 T |
| 20 Sep 14:00 | 5,926 | 25.5 T | 285.1 T |
| 20 Sep 15:00 | 6,075 | 13.2 T | 286.6 T |
| 20 Sep 16:00 | 6,067 | 96.2 T | 287.3 T |
| 20 Sep 17:00 | 5,925 | 73.6 T | 288.1 T |
| 20 Sep 18:00 | 5,954 | 34.6 T | 288.7 T |
| 20 Sep 19:00 | 4,594 | 12.6 T | 288.8 T |
| 20 Sep 20:00 | 3,881 | 16.8 T | 290.2 T |
| 20 Sep 21:00 | 3,396 | 9.2 T | 291.0 T |
| 20 Sep 22:00 | 3,174 | 11.2 T | 291.6 T |
| 20 Sep 23:00 | 2,989 | 220.9 T | 292.5 T |
| 21 Sep 00:00 | 2,421 | 11.1 T | 292.1 T |
| 21 Sep 01:00 | 2,541 | 671.2 T (block) | 291.7 T |
| 21 Sep 02:00 | 2,538 | 25.6 T | 290.7 T |
| 21 Sep 03:00 | 2,619 | 7.7 T | 290.2 T |
| 21 Sep 04:00 | 2,134 | 25.4 T | 290.8 T |
| 21 Sep 05:00 | 242 | 328.6 G | 291.4 T |
Could this be bad luck or a broken miner?
No. Mining is a game of chance with known odds, like rolling dice. From the amount of work our machines did, we can predict how many "near misses" of each size there should be. The near misses came in right on schedule, which means the machines were working normally and drillhash.com was giving them proper work. The only thing missing is the block itself, and chance cannot explain that: a block that was found and accepted does not disappear on its own.
| how close to a block | expected by the odds | what we saw |
|---|---|---|
| within 1,000 times of a block | (starting point) | 2,030 |
| within 100 times of a block | 203 | 209 |
| within 10 times of a block | 20.3 | 15 |
| a real block | 2.03 | 1 |
The machines in the test
| wallet | machines | shares sent | refused | best share difficulty | blocks found |
|---|---|---|---|---|---|
| nexa:nqtsq5g5…z843vx | 2 | 50,938 | 0 | 73.6 T | 0 |
| nexa:nqtsq5g5…tcruul | 2 | 44,964 | 0 | 246.3 T | 0 |
| nexa:nqtsq5g5…tm3t6z | 1 | 11,981 | 0 | 671.2 T (a block) | 1 |
| nexa:nqtsq5g5…g9wwhk | 1 | 10,397 | 0 | 55.9 T | 0 |
| total | 118,280 | 0 | 1 |
drillhash.com refused none of the 118,280 shares. It accepted every one, including the block.
Check it yourself
You do not have to take our word for any of this. Everything needed to check it is on this page. The first step needs some technical skill; the others need none.
- For the technical reader: recompute the block. The script below is complete and needs nothing but Python 3. It computes the Nexa proof of work for the header commitment and nonce shown above, exactly as a Nexa node does, and compares it with the network difficulty encoded in the pool's own nbits value
1b00f7f5. It prints the share difficulty, the network difficulty, and whether it is a block.# NexaPoW check, plain Python 3, no libraries needed. Run: python3 verify_block.py import hashlib, hmac HEADER = "9dd99b372c9b698589fd92fe0dd4a02e422029d18b1599400549a8e3f4d6daac" NONCE = "59617ba000002501e1ebca4b83aa61da" NBITS = "1b00f7f5" # secp256k1 curve P = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8) def add(a, b): if a is None: return b if b is None: return a if a[0] == b[0] and a[1] != b[1]: return None l = (3*a[0]*a[0]) * pow(2*a[1], P-2, P) if a == b else (b[1]-a[1]) * pow(b[0]-a[0], P-2, P) x = (l*l - a[0] - b[0]) % P return (x, (l*(a[0]-x) - a[1]) % P) def mul(k, pt=G): r = None while k: if k & 1: r = add(r, pt) pt = add(pt, pt); k >>= 1 return r def rfc6979_k(key, msg): # deterministic nonce, as libsecp256k1 blob = key + msg + b"Schnorr+SHA256 " V, K = b"\x01"*32, b"\x00"*32 K = hmac.new(K, V + b"\x00" + blob, hashlib.sha256).digest(); V = hmac.new(K, V, hashlib.sha256).digest() K = hmac.new(K, V + b"\x01" + blob, hashlib.sha256).digest(); V = hmac.new(K, V, hashlib.sha256).digest() while True: V = hmac.new(K, V, hashlib.sha256).digest(); k = int.from_bytes(V, "big") if 0 < k < N: return k K = hmac.new(K, V + b"\x00", hashlib.sha256).digest(); V = hmac.new(K, V, hashlib.sha256).digest() def schnorr_sign(key, msg): # Bitcoin Cash Schnorr d = int.from_bytes(key, "big"); k = rfc6979_k(key, msg) Rx, Ry = mul(k) if pow(Ry, (P-1)//2, P) != 1: k = N - k Px, Py = mul(d) pub = (b"\x03" if Py & 1 else b"\x02") + Px.to_bytes(32, "big") e = int.from_bytes(hashlib.sha256(Rx.to_bytes(32, "big") + pub + msg).digest(), "big") % N return Rx.to_bytes(32, "big") + ((k + e*d) % N).to_bytes(32, "big") def nexa_pow(header, nonce): # exactly what a Nexa node computes mining_hash = hashlib.sha256(hashlib.sha256(header + bytes([len(nonce)]) + nonce).digest()).digest() sig = schnorr_sign(mining_hash, hashlib.sha256(mining_hash).digest()) return int.from_bytes(hashlib.sha256(sig).digest(), "little") def target(nbits): # compact bits -> 256-bit target b = int(nbits, 16); mant = b & 0x7FFFFF; exp = b >> 24 return mant << (8*(exp-3)) if exp > 3 else mant >> (8*(3-exp)) value = nexa_pow(bytes.fromhex(HEADER), bytes.fromhex(NONCE)) need = target(NBITS) MAX = 2**256 - 1 def short(d): return f"{d/1e12:.1f} T" # trillions, as on the report page print("header commitment :", HEADER) print("nonce :", NONCE) print("nbits :", NBITS) print("share difficulty :", f"{MAX / value:,.0f}", f"({short(MAX / value)})") print("network difficulty:", f"{MAX / need:,.0f}", f"({short(MAX / need)})") print("is a block :", value <= need) - Look at the public record. Open block 1152476 and block 1152477 on the Nexa explorer, the public ledger anyone can read. Note their times: 01:39:23 and 01:50:04 UTC. Our block was found at 01:40:48. There is nothing between them.
- Look at drillhash.com's own block list for 21 September 2026 around 01:40 UTC. No block is listed for that time.
What this means for you
- A pool pays its miners out of the blocks it publishes. If the blocks are not published, there is nothing to pay from. Whatever a pool's website shows, a payout needs a published block behind it.
- Every hour on a pool that does not publish blocks costs electricity and earns nothing.
- Any honest pool publishes every block its miners find, and you can see them on the public Nexa explorer. Any pool should be able to point you to its blocks there. That is the proof that matters.
How we made sure the test was fair
- Our checking software does not touch anything. The machines used drillhash.com's own work assignments and difficulty settings, and every reply the machines saw came from drillhash.com. From the pool's side, nothing looked different from a normal miner.
- The network difficulty we measured against came from drillhash.com's own work assignment, and it matches the difficulty of the real blocks around that time on the public explorer. The pool was handing out correct work; the block it received back was not published.
- The rule we used to judge each share is the same one the Nexa network uses. The same code has found and published more than 4,500 blocks elsewhere without a single one going missing.
- drillhash.com answered "accepted", not "rejected", and reported no problem with the share.
- The machines belong to community members who volunteered them. Wallet addresses are shortened above, except the one that found the block, so the claim can be checked against drillhash.com's own website.
Thank you: rewards for the volunteers
To thank the community members who lent their machines to this audit, every 850M INIBOX earns 2,000,000 NEXA for each 24 hours of audited mining. Rewards are sent to the address each machine mined with.
We are giving our own reward to the volunteers too. Our machines took part in the audit and, at the same rate, earned 3,763,889 NEXA. We are not keeping it. It is shared out among the volunteers, and whoever mined longer gets a larger part. So each volunteer receives two amounts: the reward for their own mining, plus their part of ours.
| wallet | machines | audited time | earned by mining | part of our reward | total paid, NEXA |
|---|---|---|---|---|---|
| nexa:nqtsq5g5…tcruul | 2 | 65.3 h | 5,444,444 | + 2,517,823 | 7,962,267 |
| nexa:nqtsq5g5…g9wwhk | 1 | 17.0 h | 1,416,667 | + 655,148 | 2,071,815 |
| nexa:nqtsq5g5…tm3t6z | 1 | 15.3 h | 1,277,778 | + 590,918 | 1,868,696 |
| total | 4 | 97.7 h | 8,138,889 | + 3,763,889 | 11,902,778 |
Example. The first wallet mined 65.3 h out of the volunteers' 97.7 h, which is 66.9%. It earned 5,444,444 NEXA by mining, and it receives 66.9% of our 3,763,889 NEXA, which is 2,517,823. Together: 7,962,267 NEXA.
Audited time is the machine time of all of a wallet's machines, counted in 10 minute slots in which the machine had at least one share accepted by drillhash.com and checked by our software.
What drillhash.com says
We sent this report to drillhash.com's operator before publishing it and asked about the missing block. Their answer was that the pool works correctly. We have not received an explanation for where the block went, and it is still not on the network. We do not know what the cause is on their side, and this page does not claim to. What the data shows is simpler: a block was found, the pool accepted it, and the network never saw it. Until that changes, mining there cannot produce a block.
Questions and corrections are welcome through the community channels linked on the home page. If drillhash.com can show this block on the Nexa network, or explain what happened to it, we will update this page.
Update, 29 September 2026
Since this report was published, drillhash.com has made two announcements on its Telegram channel.
22 September. In a maintenance notice, drillhash.com confirmed the problem described in this report:
"A significant PoW verification bug has been identified in our block submission pipeline during a thorough audit conducted by INIPOOL's senior pool team. This bug prevented valid blocks from reaching the Nexa network."
In the notice's own words, "miners found valid solutions, pool accepted them, but they were never submitted to the chain". It says that the root cause was identified and a fix deployed, that the pool was being tested with drillhash.com's own miners before a full relaunch, and it recommends that miners use another pool during the maintenance.
23 September. In a second announcement, drillhash.com says the pool found its first mainnet block and paid the miners who contributed to it. It also says this about the pool's status:
"Mainnet is still private
Not open to public yet. We're keeping it in private testing while we tighten things up."
As of today, 29 September 2026, that has not changed: drillhash.com's mainnet pool is still private and not open for public mining.