def generate_block(difficulty, merkle_root, transactions): try: 'set block header info' monitoring.log("log.=================================") monitoring.log("log.Generate Block.") start_time = time.time() prev_block_height, prev_hash = file_controller.get_last_block() # TODO: type error 발생 must be str , not int # if type(prev_block_height) is not int: # prev_block_height = int(prev_block_height) # if type(prev_hash) is not str: # prev_hash = str(prev_hash) block_info = merkle_root + prev_hash vote_result = difficulty monitoring.log("log.Mining Block.") block_hash, nonce, tryanderror = proof_of_work.proof_of_work( block_info, difficulty) timestamp = int(round(time.time()*1000.0)) # UTC timestamp rule monitoring.log("log.Create Block Header.") block_header = block.BlockHeader( prev_hash, nonce, merkle_root, vote_result, str(timestamp)) block_header.block_id = "test_block_id" block_header.block_number = int(prev_block_height) + 1 block_header.block_hash = block_hash block_header.block_info = block_info block_header.miner = nodeproperty.Total_peer_num block_header.num_tx = len(transactions) monitoring.log("log.Create Block.") new_block = block.Block(block_header, transactions) json_new_block = json.dumps( new_block, indent=4, default=lambda o: o.__dict__, sort_keys=True) monitoring.log("log.Generate block complete") monitoring.log("log. ") # end_time = time.time() # elapsed_time = end_time - start_time # monitoring.log("log.Block Generate Time Time: "+str(elapsed_time)+" seconds") # tps = voting.TransactionCountForConsensus / elapsed_time # print("log.Transaction per second : "+ str(tps)) file_controller.remove_all_transactions() file_controller.remove_all_voting() sender.send_to_all_peers(json_new_block,nodeproperty.My_receiver_port) # sender.send_to_all(json_new_block) monitoring.log("log.Send block complete") except TypeError as te: print("@generate block", te)
def initialize(): logging.info('Start the blockchain initialization process...') file_controller.remove_all_transactions() file_controller.remove_all_blocks() file_controller.remove_all_voting() logging.info('Complete the blockchain initialization process...') set_peer.init_myIP()
def initialize(): monitoring.log('log.Start the blockchain initialization process...') file_controller.remove_all_transactions() file_controller.remove_all_blocks() file_controller.remove_all_voting() monitoring.log('log.Complete the blockchain initialization process...') set_peer.init_myIP()
def generate_block(difficulty, merkle_root, transactions): try: 'set block header info' print("=================================") print("Generate Block") start_time = time.time() prev_block_height, prev_hash = file_controller.get_last_block() block_info = merkle_root + prev_hash vote_result = difficulty 'mining block' block_hash, nonce, tryanderror = proof_of_work.proof_of_work( block_info, difficulty) timestamp = time.strftime('%Y%m%d%H%M%S', time.localtime()) 'create block header' block_header = block.BlockHeader( prev_hash, nonce, merkle_root, vote_result, timestamp) block_header.block_id = "test_block_id" block_header.block_number = int(prev_block_height) + 1 block_header.block_hash = block_hash block_header.block_info = block_info block_header.miner = nodeproperty.Total_peer_num block_header.num_tx = len(transactions) 'create block' new_block = block.Block(block_header, transactions) json_new_block = json.dumps( new_block, indent=4, default=lambda o: o.__dict__, sort_keys=True) print("Generate block complete") print(" ") end_time = time.time() elapsed_time = end_time - start_time print("Block Generate Time Time: %.8f seconds" % elapsed_time) print(" ") print("Transaction per second : ", 30 / elapsed_time) print("") file_controller.remove_all_transactions() file_controller.remove_all_voting() sender.send_to_all(json_new_block) print("send block complete") except TypeError as te: print("@generate block", te)
def receive_event(p_thrd_name, p_inq, p_socketq): while True: logging.debug("Waiting for B type msg") recv_data = p_inq.get() request_sock = p_socketq.get() file_controller.create_new_block( str(receiver.Data_jobj['block_header']['block_number']), recv_data) print("End create _new block") file_controller.remove_all_transactions() file_controller.remove_all_voting() request_sock.close()
def receive_event(p_thrd_name, p_inq, p_socketq): while True: monitoring.log("log.Waiting for B type msg") recv_data = p_inq.get() Data_jobj = json.loads(recv_data) request_sock = p_socketq.get() monitoring.log("log.B type msg rcvd: " + recv_data) file_controller.create_new_block( str(Data_jobj['block_header']['block_number']), recv_data) monitoring.log("log.End create _new block") file_controller.remove_all_transactions() file_controller.remove_all_voting() request_sock.close()
def main(): 'Remove all transaction in mempool' file_controller.remove_all_transactions() # file_controller.remove_all_Block() file_controller.remove_all_voting() print("Web Server Start") 'Peer setting' nodeproperty.My_IP_address = file_controller.get_my_ip() set_peer.set_peer() print("my peer : " + nodeproperty.My_peer_num) # node_mapping_table.set_node()와 set_peer()는 중복 기능이나, 일단 디버깅용으로 중복으로 유지함 node_mapping_table.set_node() 'Send to all node 10 transaction for one iteration' while True: transaction_count = 0 # socket open while transaction_count < 30: # recv_addr = "1AVsffe" extra = "Coldchain service rule event" tx = transaction.Transaction(extra, transaction_count + 1) temp = json.dumps(tx, indent=4, default=lambda o: o.__dict__, sort_keys=True) # send_to_all은 mapping table에 있는 정보로 broadcasting # send_to_all_node는 file_controller로 부터 IP List 가지고 와서 broadcasting # 테스트 후에 안전한 방식으로 선택 sender.send_to_all(temp) #sender.send_to_all_node(temps, nodeproperty.my_ip_address, nodeproperty.port) transaction_count += 1 'For block mining, time sleep' time.sleep(120)
def receive_event(p_thrd_name, p_inq): while True: monitoring.log("log.Waiting for B type msg") (recv_data, request_sock) = p_inq.get() Data_jobj = json.loads(recv_data) monitoring.log("log.B type msg rcvd: " + recv_data) file_controller.create_new_block( str(Data_jobj['block_header']['block_number']), recv_data) block_verify.verify_tx_list(Data_jobj['tx_list']) monitoring.log("log.End create _new block") monitoring.log("block." + str(Data_jobj['block_header']['block_number'])) # try file_controller.remove_all_transactions() file_controller.remove_all_voting() # try request_sock.close()
def initialize_blockdbinfo(): logging.info('Remove all transactions in mempool') file_controller.remove_all_transactions() file_controller.remove_all_blocks() logging.info('Remove all voting info ') file_controller.remove_all_voting()