Пример #1
0
 def get_block(self, index: int) -> Block:
     """取出指定索引块"""
     with self.__auto_commit() as cusor:
         fet = cusor.execute(
             f"select block from blockchain where \"index\"={index}")
         b = fet.fetchone()[0]
         return Block.load(b)
Пример #2
0
 def run():
     """接收区块,广播区块线程"""
     while self.server_flag:
         node, msg = B_mailbox.get()
         if msg.type == "PUT":
             if msg.command == "BLOCK":  # 添加新块,广播新块
                 block = Block.load(msg.data)
                 if self.add_new_block(block):
                     NetworkRouting.get_instance().broad_a_msg(msg)
         elif msg.type == "GET":
             pass  # TODO
Пример #3
0
 def recv_broad_transaction():
     """接收交易、广播交易的进程"""
     while self.server_flag:  # 阻塞在取trans的地方
         node, msg = M_mailbox.get()
         if msg.type == "PUT":
             if msg.command == "TRANS":
                 trans = Transaction.load(msg.data)
                 if trans != self.trans_later and self.add_trans(trans):
                     self.trans_later = trans
                     NetworkRouting.get_instance().broad_a_msg(
                         msg)  # 广播交易
             elif msg.command == "BLOCK":  # 其它进程先挖到,暂停挖矿
                 block = Block.load(msg.data)
                 if self.block_later != block and Verify.verify_new_block(
                         block) and FullBlockChain.get_instance(
                         ).get_top_hash() == block.get_hash():
                     self.accept_block(block)
Пример #4
0
 def get_blocks(self) -> List[Block]:
     """取出所有块"""
     with self.__auto_commit() as cusor:
         fet = cusor.execute(
             "select block from blockchain order by \"index\"")
         return [Block.load(b[0]) for b in fet.fetchall()]