Skip to content

Instantly share code, notes, and snippets.

@Rucknium
Last active August 3, 2025 14:13
Show Gist options
  • Save Rucknium/0873b10b6d36ff6c9d6f8f54107d16f7 to your computer and use it in GitHub Desktop.
Save Rucknium/0873b10b6d36ff6c9d6f8f54107d16f7 to your computer and use it in GitHub Desktop.
Qubic Monero Hashpower Share

Qubic Monero Hashpower Share

UPDATE 31 JULY 2025: Qubic has changed the view key of its mining wallet. This Gist can no longer use the previous methodology to estimate Qubic's hashpower share. I am working on a realtime web app to display Qubic-related information.


Qubic claims to be mining a large number of Monero blocks. This note plots apparent Qubic mining data.

Qubic's purported Monero wallet view key is here: https://github.com/qubic/outsourced-computing/blob/score-tracker/monero-poc/README.md#qubics-monero-wallet-address

Main address: 47hhGMKbWpKfxDiqcejWGicVvQHEYd45AEaUyKVjcZywL8c8mtjN3oACGfdrsLrPGP2r49gvTBnBiTVQcEkfBNFEKCDy7ME
View key: 577fd4a7278f55d2a9230d32823b81497b2e854d4a8702b1256a17cda42a760d

The plots are produced by exporting the wallet data of the Qubic view-only wallet and recording the time of each mined block. Then, the approximate hashpower share is computed for each aggregate time interval. For example, if Qubic mined one block in a one-hour interval, then their approximate share of hashpower during that one hour is 1/30 = 3.3% because approximately one Monero block is mined every 2 minutes.

See Steps to reproduce for more methodology information.

Note:

  • Approximate Qubic hashpower shows high variation in short periods of time. In other words, Qubic mines many blocks in a few hours, then mines few blocks in the next few hours. The different time interval aggregations in the plows show this. The high variation could be due to the random variation in block mining time, but it is more likely that the actual hashpower effort is varying frequently.

  • Approximate total Monero network hashpower is currently 5 Gh/s (5,000 Mh/s).

  • 850 Mh/s of RandomX hashpower is available for rent at miningringrentals.com. Therefore, about 17 percent of Monero's network hashpower is available for rent. These mining rigs can usually be rented in three-hour intervals. Qubic could be renting hashpower instead of mining with their Qubic network consensus nodes. UPDATE 31 July 2025: Qubic is likely not currently renting hashpower from the usual hashpower rental markets. See discussion here: https://libera.monerologs.net/monero-research-lab/20250731#c547101-c547150

Plots

qubic-hashpower-share

Steps to reproduce

Using Feather Wallet, begin by restoring a wallet. Select restore wallet from keys. Use view keys. Input the Qubic wallet view key and main address. For restore height date, choose 2025-05-15. Begin restoring wallet. It will take some time. Once fully synced, go to Wallet -> History -> Export CSV. Save the CSV file in a directory that you can remember. Name the file qubic-view-key-txs.csv.

Open R in the terminal from the directory where you saved the CSV file. Then input in the R console:

qubic <- read.csv("qubic-view-key-txs.csv", stringsAsFactors = FALSE)
qubic <- qubic[qubic$description == "Coinbase", ]
qubic$timestamp <- as.POSIXct(qubic$timestamp)

plot.hashpower.share <- function(qubic, label, hours, upper.y.limit = 0.50) {
  qubic$binned <- qubic$timestamp - as.numeric(qubic$timestamp) %% (60 * 60 * hours)
  qubic <- aggregate(qubic$binned, by = list(y = qubic$binned), function(x) { length(x) / (30 * hours) })
  qubic.fill <- data.frame(y = seq(min(qubic$y), max(qubic$y), by = 60 * 60 * hours))
  qubic <- merge(qubic, qubic.fill, all = TRUE)
  qubic$x[is.na(qubic$x)] <- 0
  plot(qubic$y, qubic$x, type = "l", yaxt = "n", xaxt = "n", ylim = c(0, upper.y.limit),
    xlab = "", ylab = "Share of hashpower, in percent",
    main = paste0("Approximate Qubic share of Monero network hashpower\nAggregation interval: ", label))
  text(min(qubic$y), upper.y.limit, labels = "gist.github.com/Rucknium", pos = 4)
  axis(2, at = axTicks(side = 2), labels = paste0(100 * axTicks(side = 2), "%"))
  axis(4, at = axTicks(side = 2), labels = paste0(100 * axTicks(side = 2), "%"))
  axis.Date(1, at = seq(min(qubic$y), max(qubic$y), by = "weeks"))
  axis.POSIXct(1, at = seq(min(qubic$y), max(qubic$y), by = "weeks"), format = "%b %d", las = 3)
}


png("qubic-hashpower-share.png", width = 720, height = 720 * 4)

par(mfrow = c(4, 1), cex = 1.70)
plot.hashpower.share(qubic, label = "1 hour", hours = 1)
plot.hashpower.share(qubic, label = "3 hours", hours = 3)
plot.hashpower.share(qubic, label = "6 hours", hours = 6)
plot.hashpower.share(qubic, label = "24 hours", hours = 24)

dev.off()

A new PNG file called qubic-hashpower-share.png should have appeared in the directory.

@NotIshanSingh
Copy link

Great stuff.

@Rucknium
Copy link
Author

Great stuff.

@NotIshanSingh Thanks! Good to hear that this is useful to people.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment