As it turns out the same scalability techniques which apply to Rollup chains (as introduced in this post) apply to plasma. The difference is instead of computation enforced with zkProofs, we use exit games for computational enforcement. This gives us plasma scalability in the optimistic case, and then pessimistically we fall back to rollup-level TPS without use of zkProofs.
We can estimate the gas savings of somewhat optimized exits, aka checkpoints (more info here), with the following python script:
Gas estimates for this ‘batch exit/checkpoint’ are:
total exits in block: 1801.354401805869
gas per exit: 4441.102756892231
avg exits per second 128.0
With this we’re already in the realm of zkRollup chains in the pessimistic case. However, we can further optimize if we want to use this technique for complex dispute resolution of applications that seemed infeasible on plasma (eg. Uniswap) but work fine on rollup chains.
In these cases we can deduplicate the
stateObjects, resulting in savings of
~2x. Then more savings may come from deduplicating
blockNumber, reducing range bytes, & including a deposit registry of
4 bytes. With this we may be able to get down to
20 bytes per exit/checkpoint.
Approximate results for this application specific optimized checkpoint:
total exits in block: 5596.072931276297
gas per exit: 1429.5739348370928
avg exits per second 399.0
This once again reorients plasma intuitions. We get plasma-level scale optimistically, and then in the worst case fallback to rollup scalability.
For a clear example of the scalability benefits vs traditional rollup, using the assumptions made in the original rollup post, we can achieve about 2x the TPS using this optimistic approach. The original post assumes the use of tricks which can get our transaction size to
~8 bytes. With 8 bytes transactions, we can run the simulator and we get these results:
total exits in block: 13081.967213114754
gas per exit: 611.5288220551379
avg exits per second 934.0