1 from entangled.kademlia import node, encoding, protocol
2 from twisted.internet import defer
6 class CustomBencode(encoding.Bencode):
7 def __init__(self, prefix=""):
10 def encode(self, data):
11 return self.prefix + encoding.Bencode.encode(self, data)
13 def decode(self, data):
15 if not data.startswith(self.prefix):
16 raise ValueError("invalid prefix")
17 return encoding.Bencode.decode(self, data[len(self.prefix):])
19 class Node(node.Node):
22 for bucket in self._routingTable._buckets:
23 for contact in bucket._contacts:
26 def __init__(self, blockCallback, getBlocksCallback, **kwargs):
27 #node.Node.__init__(self, networkProtocol=protocol.KademliaProtocol(self, msgEncoder=CustomBencode("p2pool")), **kwargs)
28 node.Node.__init__(self, **kwargs)
29 self.blockCallback = blockCallback
30 self.getBlocksCallback = getBlocksCallback
32 # disable data storage
35 def store(self, key, value, originalPublisherID=None, age=0, **kwargs):
39 def findValue(self, key, value, originalPublisherID=None, age=0, **kwargs):
42 def _republishData(self, *args):
43 return defer.succeed(None)
48 def block(self, block_data, _rpcNodeID, _rpcNodeContact):
49 self.blockCallback(bitcoin_p2p.block.unpack(block_data), _rpcNodeContact)
52 def get_blocks(self, chain_id, _rpcNodeID, _rpcNodeContact):
54 self.getBlocksCallback(chain_id, _rpcNodeContact)