A functionary layer should be in charge of passing around proposals and finalized blocks, and an important part is taking advantage of the already-built compact block machinery.
All ignoring "PoW checks":
getcompactsketch -> binary format in hex
consumecompactsketch -> fill in sketch as much as possible, return hex if complete, otherwise return list of missing indices
getgetblocktxn -> binary format in hex
consumegetblocktxn -> fills in sketch, returns complete block if complete, error otherwise
Other improvements to improve sync:
prefill transactions up to limit:
Don't include transactions in block less than X seconds old (already merged)
fixed in #410