Are these Tx chain and Rx chains the correct way to implement this transmission?
No. When you want to transmit a real cosine in passband, then you need a single complex tone in baseband. Not a real one. Otherwise, you'll have two real tones on the air, one at the mixing frequency + cosine frequency, and one at the mixing frequency - cosine frequency.
But maybe, you wanted that, I'm not sure from your description. However, the fact that you're calling things "chirp" makes this unlikely.
Then, a real-valued sampled signal at a sampling rate of 60 MHz can't represent 56 MHz. The highest frequency it can represent is less than 30 MHz. Nyquist (The Nyquist-Shannon sampling theorem, to be exact)!
Also, you can't throw away the imaginary part in your receiver: you have no knowledge of your phase. So, you're unsynchronized in phase, and then you can't assume that the real signal you've sent is received as real signal. Especially if this, as I might guess, is about channel estimation or radar, you can't make that assumption.
So, I'm sorry but: you really need to refresh your education on sampling theory, and on what equivalent complex baseband and bandpass signals are, first!
I think I can't since the RF BW is 112 MHz (full BW) around the center frequency, but am I wrong?
Yes, the bandwidth is 56 MHz, not twice that.
Also, delete the file sink on the transmitter site: that signal you're transmitting is deterministic, and it's easier to just recreate it than read it from a file; in fact, that file sink hurts a lot, since you need to generate samples at a pretty high rate under hard real-time constraints. You're trying to write 60 MS/s · 32 bit/S = 1.92 Gb/s to a storage device; that takes computational power and bus bandwidth away from your PC, and acts as an artificial slow down.
I've seen few SSDs that can sustain that rate for a significant amount of time under these constraints.
On the RX side, as said, you need to be complex, so you need to write 60 MS/s · 2·32 bit/S = 2·1.92 Gb/s = 3.84 Gb/s to a storage device; that really is challenging. You might want to start with Vector sink first, which stores the samples in RAM, and use the "reserve memory" parameter of that to preallocate RAM for these samples; use a head block to cut off after you've collected enough samples and read the contents of the vector sink in Python. (That "reserve memory option" might only available in recent versions of GNU Radio – you're using an outdated one)