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)
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
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)
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()]