Exemple #1
0
    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__()
Exemple #2
0
 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