We load tested our chain by calling the remark with events extrinsics. We used batch to have more than 33K transactions in multiple batches in one block.
The block was processed correctly even if it took a little bit more time. But the number of event was greater than u16
(65_535
). This means that the block events could not be decoded by any other part of the infrastructure (indexers, explorer, polka-js, ...).
Error: Unable to decode storage system.events:: createType(Vec<FrameSystemEventRecord>):: Vec length 72264 exceeds 65536
I know there are safeguard around this:
- Transaction pool transaction limit (can be bypassed using batches).
- Transaction pool size limit (not reached by those extrinsics).
- The price of those transactions without any economic incentives.
- We could manually increase the weight (which is a bad practice in my sense)
- We could decrease the compute time in the block (the compute time was ok, 800B/2000B, only event count was off)
After that, I wondered how other chains were doing it, and I managed to reproduce the same issue on Polkadot for an amount between 100 and 200 dot (this was done on v1.0.0 because our chain used the same, I don't know if something was done in the meantime).
My question is:
What would be a good way to handle this issue ?