How do layer 2s really differ from execution sharding?