def confirm_block(self, confirmed_block_hash): """인증완료후 Block을 Confirm해 줍니다. :param confirmed_block_hash: 인증된 블럭의 hash :return: Block 에 포함된 tx 의 갯수를 리턴한다. """ logging.debug("BlockChain::confirm_block") try: unconfirmed_block_byte = self.__confirmed_block_db.Get( BlockChain.UNCONFIRM_BLOCK_KEY) except KeyError: except_msg = "there is no unconfirmed block in this peer by: " + confirmed_block_hash logging.warning(except_msg) raise BlockchainError(except_msg) unconfirmed_block = Block() unconfirmed_block.deserialize_block(unconfirmed_block_byte) if unconfirmed_block.block_hash != confirmed_block_hash: logging.warning( "It's not possible to add block while check block hash is fail-" ) raise BlockchainError('확인하는 블럭 해쉬 값이 다릅니다.') logging.debug("unconfirmed_block.block_hash: " + unconfirmed_block.block_hash) logging.debug("confirmed_block_hash: " + confirmed_block_hash) logging.debug("unconfirmed_block.prev_block_hash: " + unconfirmed_block.prev_block_hash) unconfirmed_block.block_type = BlockType.confirmed # Block Validate and save Block self.add_block(unconfirmed_block) self.__confirmed_block_db.Delete(BlockChain.UNCONFIRM_BLOCK_KEY) return unconfirmed_block.confirmed_transaction_list.__len__()
def __add_genesisblock(self): """ 제네시스 블럭을 추가 합니다. :return: """ logging.info("Make Genesis Block....") block = Block() block.block_type = BlockType.confirmed block.generate_block() # 제네시스 블럭을 추가 합니다. self.add_block(block)
def __add_single_tx_block_return_tx_with_test(self): last_block = self.chain.last_block block = Block() tx = Transaction() hashed_value = tx.put_data("1234") self.assertNotEqual(hashed_value, "", "트랜잭션 생성 실패") self.assertTrue(block.put_transaction(tx), "Block에 트랜잭션 추가 실패") logging.debug("tx_hash: " + tx.get_tx_hash()) block.generate_block(last_block) block.block_type = BlockType.confirmed # add_block include __add_tx_to_block_db what we want to test self.assertTrue(self.chain.add_block(block), "Fail Add Block to BlockChain in test_add_tx_to_block_db") return tx