View difference between Paste ID: Ai2htr3R and 36fn1Tmx
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/python
2
import sys
3
import random
4
5
import stratum
6
import stratum.settings as settings
7
from twisted.internet import reactor
8
from twisted.application import service, internet    
9
from stratum.services import ServiceEventHandler, GenericService
10
from stratum import socket_transport
11
from stratum.connection_registry import ConnectionRegistry
12
13
class MiningService(GenericService):
14
    service_type = 'mining'
15
    service_vendor = 'custom'
16
    is_default = True
17
18
    @classmethod
19
    def _reconnect(cls, switchto):
20
        next_reconnect = random.randint(5,10)
21
        reactor.callLater(next_reconnect, cls._reconnect, switchto)
22
        
23
        selected = random.choice(switchto)
24
        print switchto
25
        print "Reconnecting to", selected
26
        
27
        for conn in ConnectionRegistry.iterate():
28
            conn = conn()
29
            if not conn:
30
                continue
31
            
32
            conn.rpc('client.reconnect', [None, selected, 2], is_notification=True)
33
            
34
        print "Next reconnect in %d sec" % next_reconnect
35
        
36
         
37
    def _finish_after_subscribe(self, result):
38
        self.connection_ref().rpc('client.get_version', [])
39
        self.connection_ref().rpc('mining.notify', 
40
            ["124b", "9eb4d8f01c4522cb1191e93896fff7204bae4aebec50a7030000016700000000",
41
            "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2103a21703062f503253482f042c67755008",
42
            "072f736c7573682f0000000001026f312a010000001976a914e8e6ace10f10ce5ed479c7188c9b4061e53aa90688ac00000000",
43
            ["11d30680b28e3101141731fa04daf7c42fb90d4fa8b59bb1411ff4ed31bed51f",
44
             "968b36b8a85d22695970764a8b8e6ba2f8fd864c2a003cd44eed5947a60a467a",
45
             "2c691ebaaedb4d53d8c03c1c7d7d4f82dba8d832d39337347a03232bfc57f1de",
46
             "239eec3b0098cd7f82c4071ff41cb2d235558a55a0d9341d7b9f188ebdc4140f",
47
             "608fe54d1e97ee8b6516018cd82918012cbf876dfe3ad166c3d37f5dbd7c4546",
48
             "8841944a4b2679cd297158f6175a655a885adc80116e0608842821a248c8d3eb",
49
             "59411a7a593424ec42b57bc0f91ee56bbf717564001786ba67e4702e0a47ef1e"],
50
             "00000002", "1a057e08", "5075672c", True], is_notification=True
51
        )
52
53
        return result
54
        
55
    def authorize(self, worker_name, password):
56
        return True
57
    
58
    def subscribe(self):
59
        self.connection_ref().on_finish.addCallback(self._finish_after_subscribe)
60
        return ([], ''.join([ "%x" % random.randint(0,15) for x in range(8) ]), 4)
61
    
62
    def submit(self, worker_name, job_id, extranonce2, ntime, nonce):
63
        return True
64
    
65
if __name__ == '__main__':    
66
    try:
67
        listening_port = int(sys.argv[1])
68
        print "Listening on port:", listening_port
69
    except:
70
        print "./reconnect_demo.py <listening_port> [<switchto1> <switchto2> <switchtoN>]"
71
        sys.exit()
72
    
73
    switchto = [ int(x) for x in sys.argv[2:] ]
74
    print "I'll randomly switch connections to:", switchto
75
    
76
    reactor.listenTCP(listening_port, socket_transport.SocketTransportFactory(
77
            debug=True, event_handler=ServiceEventHandler))
78
    
79
    MiningService._reconnect(switchto)
80
    
81
    reactor.run()