raise p2p.PeerMisbehavingError('received block header fails PoW test')
self.node.handle_header(header)
- @defer.inlineCallbacks
def broadcast_share(self, share_hash):
shares = []
for share in self.node.tracker.get_chain(share_hash, min(5, self.node.tracker.get_height(share_hash))):
self.shared_share_hashes.add(share.hash)
shares.append(share)
- for peer in list(self.peers.itervalues()):
- yield peer.sendShares([share for share in shares if share.peer_addr != peer.addr], self.node.tracker, self.node.known_txs_var.value, include_txs_with=[share_hash])
+ for peer in self.peers.itervalues():
+ peer.sendShares([share for share in shares if share.peer_addr != peer.addr], self.node.tracker, self.node.known_txs_var.value, include_txs_with=[share_hash])
def start(self):
p2p.Node.start(self)
def fragment(f, **kwargs):
try:
- return f(**kwargs)
+ f(**kwargs)
except p2protocol.TooLong:
fragment(f, **dict((k, v[:len(v)//2]) for k, v in kwargs.iteritems()))
- return fragment(f, **dict((k, v[len(v)//2:]) for k, v in kwargs.iteritems()))
+ fragment(f, **dict((k, v[len(v)//2:]) for k, v in kwargs.iteritems()))
class Protocol(p2protocol.Protocol):
max_remembered_txs_size = 2500000
self.connected2 = False
def connectionMade(self):
- p2protocol.Protocol.connectionMade(self)
-
self.factory.proto_made_connection(self)
self.connection_lost_event = variable.Event()
self.node.handle_shares([p2pool_data.load_share(share, self.node.net, self.addr) for share in shares if share['type'] >= 9], self)
def sendShares(self, shares, tracker, known_txs, include_txs_with=[]):
- if not shares:
- return defer.succeed(None)
-
if self.other_version >= 8:
tx_hashes = set()
for share in shares:
fragment(self.send_remember_tx, tx_hashes=[x for x in hashes_to_send if x in self.remote_tx_hashes], txs=[known_txs[x] for x in hashes_to_send if x not in self.remote_tx_hashes])
- res = fragment(self.send_shares, shares=[share.as_share() for share in shares])
+ fragment(self.send_shares, shares=[share.as_share() for share in shares])
if self.other_version >= 8:
- res = self.send_forget_tx(tx_hashes=hashes_to_send)
+ self.send_forget_tx(tx_hashes=hashes_to_send)
self.remote_remembered_txs_size -= sum(100 + bitcoin_data.tx_type.packed_size(known_txs[x]) for x in hashes_to_send)
-
- return res
message_sharereq = pack.ComposedType([
self._message_prefix = message_prefix
self._max_payload_length = max_payload_length
self.dataReceived2 = datachunker.DataChunker(self.dataReceiver())
- self.paused_var = variable.Variable(False)
self.traffic_happened = traffic_happened
- def connectionMade(self):
- self.transport.registerProducer(self, True)
-
- def pauseProducing(self):
- self.paused_var.set(True)
-
- def resumeProducing(self):
- self.paused_var.set(False)
-
- def stopProducing(self):
- pass
-
def dataReceived(self, data):
self.traffic_happened.happened('p2p/in', len(data))
self.dataReceived2(data)
data = self._message_prefix + struct.pack('<12sI', command, len(payload)) + hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4] + payload
self.traffic_happened.happened('p2p/out', len(data))
self.transport.write(data)
- return self.paused_var.get_when_satisfies(lambda paused: not paused)
def __getattr__(self, attr):
prefix = 'send_'