예제 #1
0
def start():
    with open(DATA_FILE) as fin:
        blocks = fin.read().strip().split('\n')
        for block in blocks[:1]:
            block = json.loads(block)
            txs = block['txs']
            n_txs = len(txs)
            bytes_pushed['n_txs'] = n_txs
            logging.info("Read %d transactions" % n_txs)
            logging.info(
                "Selecting %d transactions at random for inclusion in mempool"
                % (MEMPOOL_PCT * n_txs))
            # random.shuffle(txs)
            n_selected = 0
            for i, tx in enumerate(txs):
                if n_selected < MEMPOOL_PCT * n_txs:
                    selected_txs.append(tx)
                    n_selected += 1
                else:
                    # print("Excluding ", tx['hash'])
                    skipped_txs_ids.add(tx['hash'].encode('utf-8'))
                    bytes_pushed['txs'].append(len(tx_to_bytes(tx)))
                    skipped_txs.append(tx)
            bytes_pushed['cmpct'] = n_txs * 6 + 10 + 80
        logging.info("Skipped %d transactions" % len(skipped_txs))
    client = network.GeventNetworkClient()
    client.register_handler('inv', inv_handler)
    client.register_handler('graphene', graphene_handler)
    network.ClientBehavior(client)
    client.listen(address, port)
    client.run_forever()
예제 #2
0
def start():
    client = network.GeventNetworkClient()
    client.register_handler('inv', on_inv_received)
    client.register_handler('tx', on_tx_received)
    client.register_handler('block', on_block_received)
    network.ClientBehavior(client)
    client.connect(('seed.bitcoinstats.com', 8333))
    client.run_forever()
예제 #3
0
    def test_client_behavior_init(self):
        network.ClientBehavior(self.network_client)
        args = self.network_client.register_handler.call_args_list
        types = [a[0][0] for a in args]

        # Ensure we have at least handlers for the connection established event
        # and an incoming version message
        self.assertTrue(network.ConnectionEstablishedEvent.type in types)
        self.assertTrue(messages.VersionPacket.type in types)
예제 #4
0
    def test_client_behavior_on_connect(self):
        b = network.ClientBehavior(self.network_client)
        message = mock.Mock(type=network.ConnectionEstablishedEvent.type)

        # We should not send anything on new incoming connections
        self.connection.incoming = True
        b.on_connect(self.connection, message)
        self.assertFalse(self.connection.send.called)

        # On outgoing connections we initiate the handshake
        self.connection.incoming = False
        b.on_connect(self.connection, message)
        self.assertTrue(self.connection.send.called)
예제 #5
0
def start():
    with open(DATA_FILE) as fin:
        blocks = fin.read().strip().split('\n')
        for block in blocks[:1]:
            block = json.loads(block)
            txs = block['txs']
            n_txs = len(txs)
            logging.info("Read %d transactions" % n_txs)
            # random.shuffle(txs)
            n_selected = 0
            selected_txs.extend(txs)
    client = network.GeventNetworkClient()
    client.register_handler('getdata', getdata_handler)
    client.register_handler('verack', verack_handler)
    network.ClientBehavior(client)
    client.connect((peer_address, peer_port))
    client.run_forever()
예제 #6
0
    def test_client_behavior_on_version(self):
        b = network.ClientBehavior(self.network_client)
        b.send_version = mock.Mock()
        b.send_verack = mock.Mock()

        # This is an outgoing connection, so we should send just one verack
        self.connection.incoming = False
        b.on_version(self.connection, mock.Mock())
        self.assertFalse(b.send_version.called)
        self.assertEquals(b.send_verack.call_count, 1)

        # Now on an incoming connection, we also respond with a version
        self.connection.incoming = True
        b.send_verack.reset()
        b.on_version(self.connection, mock.Mock())
        self.assertTrue(b.send_verack.call_count, 1)
        self.assertTrue(b.send_version.call_count, 1)
예제 #7
0
 def test_client_behavior_send_verack(self):
     b = network.ClientBehavior(self.network_client)
     b.send_verack(self.connection)
     self.connection.send.assert_called_with('verack', '')
     self.assertEquals(self.connection.send.call_count, 1)