Follow-up from #23880 (comment).
This stores the lazy serialized compact block message future for the last seen block, rather than a shared pointer to the compact block itself. Then we don't have to reserialize the message for any incoming CMPCTBLOCK messages from low-bandwidth peers.
It was mentioned there was a speed savings of 25% using this method for sending to high-bandwidth peers #23880 (comment). I've included benchmarks which seems to be an even higher speedup.
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
| 38,462.08 | 25,999.63 | 0.3% | 150,324.88 | 84,927.50 | 1.770 | 34,126.12 | 0.1% | 0.01 | SerializeNetMsg
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
| 616.47 | 1,622,135.41 | 0.9% | 796.14 | 1,359.27 | 0.586 | 177.03 | 0.0% | 0.01 | CacheSerializeNetMsg