(without economic games)
Part 1: Data store
We would want to plug this into the client's RocksDB instance somehow, and answer BlockData requests out of it.
In the consensus worker, we shouldn't cast an Available vote until we've actually ensured availability of the data.
https://github.com/paritytech/polkadot/blob/ddc8d705570fda5f492895373b69b9b84cae1d69/polkadot/consensus/src/shared_table/mod.rs#L256-L257
should be preceded by a call to store.make_available(block_data, extrinsic) or something similar.
For now, just storing block data, indexed by (Hash, ParaId), the relay chain block hash and parachain ID.
Part 2: Network protocol for fetching data
This would be used as a last resort in case the data doesn't appear to be easily available.
Finding validator who is bonded to have the data and requesting from them. The validator answers out of the data store
We would add this in the PolkadotProtocol, probably with a trait object DataStore