I see where your caution comes from!
There’s a lot of crazy properties and moving parts we are trying to combine here, particularly for example if we want to use Near-instant transaction confirmation via staggered shard block production to achieve sub-1-second app-level confirmation times then you want users to send transactions either directly to block producers or to aggregator nodes that then forward the data along to block producers immediately, without leaving room for weird multi-network-round games.
So the things that we want to have at the same time, as far as I can tell, are:
- Efficiency-saving batching (eg. merging Merkle branches) should happen somehow in the normal case (eg. if efficiency-saving batching temporarily stops happening when attempted censorship is taking place that’s ok)
- Block producers should not have to run custom per-EE code
- Avoid centralization or at least facilitate easy circumvention of centralized-actors-turned-harmful in relayer networks
- Maximize simplicity of the whole construction
Anything else I am missing?