예제 #1
0
    def post_request_stream(self, name, request, response):
        logging.info(f"GOSSIP POST REQUEST STREAM: {name}({hexify(request)})")

        if name == "StreamLatestMessages":
            if self.equivocating_block:
                b = self.equivocating_block
                logging.info(
                    f"GOSSIP POST REQUEST STREAM: SENDING FAKE Justification with latest_block_hash ({b.block_hash.hex()}):"
                    f" {self.equivocating_block_justification}")
                yield self.equivocating_block_justification
                return

        if name == "GetBlockChunked":
            if self.equivocating_block:
                logging.info(
                    f"GOSSIP POST REQUEST STREAM: GetBlockChunked: sending FAKE block"
                )
                for chunk in block_to_chunks(self.equivocating_block):
                    yield chunk
                return
            else:
                logging.info(
                    f"GOSSIP POST REQUEST STREAM: Save block and generate equivocating one"
                )
                response = [r for r in response]
                self.last_block = block_from_chunks(response)
                self.equivocating_block = self.modify_to_equivocate(
                    block_from_chunks(response))
                self.equivocating_block_summary = block_summary(
                    self.equivocating_block)
                self.equivocating_block_justification = block_justification(
                    self.equivocating_block)
                logging.info(
                    f"GOSSIP POST REQUEST STREAM: Equivocating block hash: {self.equivocating_block.block_hash.hex()}"
                )

        for r in response:
            logging.info(
                f"GOSSIP POST REQUEST STREAM: {name} => {hexify(r)[:100]}...")
            yield r
    def post_request_stream(self, name, request, response):
        logging.debug(f"GOSSIP POST REQUEST STREAM: {name}({hexify(request)})")

        if name == "GetBlockChunked":
            block = block_from_chunks(response)

            # Remove approvals from first deploy in the block.
            del block.body.deploys[0].deploy.approvals[:]

            private_key = base64.b64decode(self.node.config.node_private_key)
            update_hashes_and_signature(block, private_key)
            response = block_to_chunks(block)

        for r in response:
            logging.debug(f"GOSSIP POST REQUEST STREAM: {name} => {hexify(r)}")
            yield r