code: def apply_transaction(self,
                            header: BlockHeader,
                            transaction: BaseTransaction
                            ) -> Tuple[Receipt, BaseComputation]:
          
          self.validate_transaction_against_header(header, transaction)
          computation = self.state.apply_transaction(transaction)
          receipt = self.make_receipt(header, transaction, computation, self.state)
          self.validate_receipt(receipt)
  
          return receipt, computation
docs: Apply the transaction to the current block. This is a wrapper around
          :func:`~eth.vm.state.State.apply_transaction` with some extra orchestration logic.
  
          :param header: header of the block before application
          :param transaction: to apply