Minerbtc
Minerbtc
import time
import numpy as np
import pyopencl as cl
import tkinter as tk
from tkinter import messagebox
import threading
from PIL import Image, ImageTk, ImageSequence
import platform
import psutil
import requests
# SHA-256 kernel
KERNEL_CODE = """
__constant uint K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
uint EP0(uint x) {
return ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22);
}
uint EP1(uint x) {
return ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25);
}
uint SIG0(uint x) {
return ROTR(x, 7) ^ ROTR(x, 18) ^ (x >> 3);
}
uint SIG1(uint x) {
return ROTR(x, 17) ^ ROTR(x, 19) ^ (x >> 10);
}
// Load data
for (i = 0; i < 16; i++) {
W[i] = data[i];
}
for (i = 16; i < 64; i++) {
W[i] = SIG1(W[i-2]) + W[i-7] + SIG0(W[i-15]) + W[i-16];
}
// Main loop
for (i = 0; i < 64; i++) {
t1 = h + EP1(e) + CH(e, f, g) + K[i] + W[i];
t2 = EP0(a) + MAJ(a, b, c);
h = g;
g = f;
f = e;
e = d + t1;
d = c;
c = b;
b = a;
a = t1 + t2;
}
// Compute hash
sha256(data, hash);
// Check hash
int found_local = 1;
for (int i = 0; i < difficulty; i++) {
if ((hash[i/8] >> (28 - (i % 8) * 4)) & 0xf) {
found_local = 0;
break;
}
}
// Save result
if (found_local && *found == 0) {
for (int i = 0; i < 8; i++) {
hash_result[i] = hash[i];
}
*found = id;
}
}
"""
class BitcoinMiner:
def __init__(self, difficulty, progress_callback=None):
self.difficulty = difficulty
self.progress_callback = progress_callback
self.platform = cl.get_platforms()[0]
self.device = self.platform.get_devices()[0]
self.context = cl.Context([self.device])
self.queue = cl.CommandQueue(self.context)
self.program = cl.Program(self.context, KERNEL_CODE).build()
self.mining = False
work_group_size = 1024
self.mining = True
while self.mining and not stop_event.is_set():
self.program.mine(self.queue, (