Beispiel #1
0
 async def connect_peer(self, ip: str, port: int, data: bytes) -> None:
     loop = asyncio.get_event_loop()
     try:
         await loop.create_connection(lambda: TCPClientProtocol(self, data),
                                      ip, port)
     except ConnectionRefusedError:
         logger.debug("Connection refused. Peer may be offline.")
    def test_log(self):
        print()

        logger.info("INFO LOG")
        logger.warning("WARNING LOG")
        logger.error("ERROR LOG")
        logger.debug("DEBUG LOG")
        logger.info(self)
        logger.error(1, 2)
Beispiel #3
0
    def stop(self):
        super().stop()

        for task in asyncio.Task.all_tasks():
            logger.debug(f"Canceling task: {task}")
            task.cancel()

        if self.tcp_server:
            self.tcp_server.close()

        if self.sync_loop:
            self.sync_loop.cancel()
Beispiel #4
0
    def handle_receive_latest_block(self, block: dict) -> None:
        peer_block = Block.deserialize(block)
        latest_block = self.blockchain.latest_block
        is_added = self.blockchain.add_block(peer_block)
        if is_added:
            self.server.broadcast_message(
                Message.send_latest_block(peer_block))
        elif latest_block.index < peer_block.index:
            # peer is longer, ask for blockchain
            logger.debug("Having no latest block. Asking for blockchain")
            self.server.broadcast_message(Message.get_blockchain())
        else:
            # I'm on the edge!
            pass

        self.transport.close()
Beispiel #5
0
    async def mine_blockchain(self) -> None:
        if not self.mining:
            return

        data = self.get_mempool()
        while True:
            start = time.time()
            logger.debug("Start mining...")
            mined = await self._mine(data)
            if mined:
                logger.debug(
                    f"Mined block after {time.time() - start:.2f}s, broadcasting..."
                )
                self.broadcast_message(
                    Message.send_latest_block(self.blockchain.latest_block))
            else:
                logger.debug("Mining block failed, awaiting longest chain")
                self.broadcast_message(Message.get_blockchain())
                await asyncio.sleep(3)
Beispiel #6
0
parser.add_argument("-m", "--mine", action="store_true", help="Mining blocks")

parser.add_argument("-D", "--debug", action="store_true", help="Debug mode")

args = parser.parse_args()

server = Server(mining=args.mine)
server.listen(args.port)

loop = asyncio.get_event_loop()
loop.set_debug(args.debug)


if args.bootstrap:
    logger.debug(
        loop.run_until_complete(
            server.bootstrap([(ip, port) for ip, port in args.bootstrap])
        )
    )

try:
    if server.mining:
        loop.run_until_complete(server.mine_blockchain())
    else:
        loop.run_forever()
except KeyboardInterrupt:
    logger.debug(server.blockchain[-5:])
    server.stop()
finally:
    loop.close()
Beispiel #7
0
 def refresh_table(self) -> None:
     logger.debug("Refreshing routing table")
     asyncio.ensure_future(self._refresh_table())
     loop = asyncio.get_event_loop()
     self.refresh_loop = loop.call_later(10, self.refresh_table)
Beispiel #8
0
 def connection_lost(self, exc):
     logger.debug("The server closed the connection")
Beispiel #9
0
 def data_received(self, data: bytes):
     logger.debug(f"Data receive from server: {data[:20]!r}")
     self.handle_message(data)
Beispiel #10
0
 def connection_made(self, transport):
     peername = transport.get_extra_info("peername")
     logger.debug(f"Connecting server {peername}")
     self.transport = transport
     self.transport.write(self.data)
Beispiel #11
0
 def connection_lost(self, exc):
     logger.debug("The client closed the connection")
Beispiel #12
0
 def connection_made(self, transport):
     peername = transport.get_extra_info("peername")
     logger.debug(f"Connecting client {peername}")
     self.transport = transport