def create_block(): diff_bits = 5 transactions = transaction.get_transactions() # transaction이 없을 경우 block을 생성하지 않음 if (len(transactions) == 0): print("No transactions...") return # 내 node가 가지고 있는 마지막 블럭 last_block = block.get_last_block() #transaction JSON 문자열로 변환 transactions_str = [] for tx in transactions: transactions_str.append(tx.to_json()) # transaction 으로부터 merkle root 생성 merkle_root = merkle_tree(transactions_str) # block 새로 생성 _block = Block() # 마지막 블록이 있는 경우 if last_block: # last bock 에 대한 정보 저장 _block.prev_block_id = last_block.block_id _block.prev_block_hash = last_block.block_hash # 작업 증명을 위해 nonce값과 결과 생성 _block.block_id = last_block.block_id + 1 _block.merkle_root = merkle_root _block.difficulty = diff_bits block_header = _block.getheader_json() hash_result, nonce = proof_of_work(block_header, diff_bits) # block 정보 _block.block_hash = hash_result _block.nonce = nonce _block.tx_list = transactions_str # 내 node에 block 저장 block.append_block(_block) # 내 node가 가지고 있는 transaction 삭제 transaction.remove_all() # 나머지 node에게 block 전송 sender.send_to_all_node((_block.to_json()), except_my_node=True)
def create_block(): transactions = transaction.get_transactions() # transaction이 없을 경우 block을 생성하지 않음 if len(transactions) == 0: return # 내 node 가 가지고 있는 마지막 블럭 last_block = block.get_last_block() # transaction JSON 문자열로 변환 transactions_str = list(map(lambda x: x.to_json(), transactions)) # transaction으로부터 merkle root 생성 merkle_root = merkle_tree(transactions_str) # block 정보에 merkle root 할당 block_info = merkle_root # block 새로 생성 _block = Block() # 마지막 block이 있는 경우 if last_block: # block 정보에 마지막 블럭의 해쉬를 더함 block_info += last_block.block_hash # 새로 생성한 block에 이전 block 정보 저장 _block.prev_block_hash = last_block.block_hash _block.prev_block_id = last_block.block_id # 작업 증명을 통해 nonce값과 hash 결과 생성 hash_result, nonce = proof_of_work(block_info, diff_bits=5) # block 정보 _block.block_hash = hash_result _block.nonce = nonce _block.block_info = block_info _block.time_stamp = datetime.datetime.now() # 내 node 에 block 저장 block.create_block(_block) # 내 node가 가지고 있는 transaction 삭제 transaction.remove_all() # 나머지 node에게 block 전송 sender.send_to_all_node((_block.to_json()), except_my_node=True)