forked from m0mchil/poclbm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoclbm.py
executable file
·74 lines (61 loc) · 4.08 KB
/
poclbm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python
from BitcoinMiner import *
from optparse import OptionGroup, OptionParser
from time import sleep
import HttpTransport
import pyopencl as cl
import socket
# Socket wrapper to enable socket.TCP_NODELAY and KEEPALIVE
realsocket = socket.socket
def socketwrap(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0):
sockobj = realsocket(family, type, proto)
sockobj.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
sockobj.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
return sockobj
socket.socket = socketwrap
VERSION = '20120205'
usage = "usage: %prog [OPTION]... SERVER[#tag]...\nSERVER is one or more [http[s]://]user:pass@host:port (required)\n[#tag] is a per SERVER user friendly name displayed in stats (optional)"
parser = OptionParser(version=VERSION, usage=usage)
parser.add_option('--verbose', dest='verbose', action='store_true', help='verbose output, suitable for redirection to log file')
parser.add_option('-q', '--quiet', dest='quiet', action='store_true', help='suppress all output except hash rate display')
parser.add_option('--proxy', dest='proxy', default='', help='specify as [proto://user:pass@]host:port (proto is one of socks4, socks5, http; default is socks5)')
group = OptionGroup(parser, "Miner Options")
group.add_option('-r', '--rate', dest='rate', default=1, help='hash rate display interval in seconds, default=1 (60 with --verbose)', type='float')
group.add_option('-e', '--estimate', dest='estimate', default=900, help='estimated rate time window in seconds, default 900 (15 minutes)', type='int')
group.add_option('-a', '--askrate', dest='askrate', default=5, help='how many seconds between getwork requests, default 5, max 10', type='int')
group.add_option('-t', '--tolerance', dest='tolerance', default=2, help='use fallback pool only after N consecutive connection errors, default 2', type='int')
group.add_option('-b', '--failback', dest='failback', default=10, help='attempt to fail back to the primary pool every N getworks, default 10', type='int')
group.add_option('--no-server-failbacks', dest='nsf', action='store_true', help='disable using failback hosts provided by server')
parser.add_option_group(group)
group = OptionGroup(parser, "Kernel Options")
group.add_option('-p', '--platform', dest='platform', default=-1, help='use platform by id', type='int')
group.add_option('-d', '--device', dest='device', default=-1, help='use device by id, by default asks for device', type='int')
group.add_option('-w', '--worksize', dest='worksize', default=-1, help='work group size, default is maximum returned by opencl', type='int')
group.add_option('-f', '--frames', dest='frames', default=30, help='will try to bring single kernel execution to 1/frames seconds, default=30, increase this for less desktop lag', type='int')
group.add_option('-s', '--sleep', dest='frameSleep', default=0, help='sleep per frame in seconds, default 0', type='float')
group.add_option('-v', '--vectors', dest='vectors', action='store_true', help='use vectors')
parser.add_option_group(group)
(options, options.servers) = parser.parse_args()
platforms = cl.get_platforms()
if options.platform >= len(platforms) or (options.platform == -1 and len(platforms) > 1):
print 'Wrong platform or more than one OpenCL platforms found, use --platform to select one of the following\n'
for i in xrange(len(platforms)):
print '[%d]\t%s' % (i, platforms[i].name)
sys.exit()
if options.platform == -1:
options.platform = 0
devices = platforms[options.platform].get_devices()
if (options.device == -1 or options.device >= len(devices)):
print 'No device specified or device not found, use -d to specify one of the following\n'
for i in xrange(len(devices)):
print '[%d]\t%s' % (i, devices[i].name)
sys.exit()
miner = None
try:
miner = BitcoinMiner(devices[options.device], options, VERSION, HttpTransport.HttpTransport)
miner.start()
except KeyboardInterrupt:
print '\nbye'
finally:
if miner: miner.stop()
sleep(1.1)