L2 round-trips through JSON, so timestamp (Date) arrives as a string and
aggregate (BigNumber) loses its runtime shape on cross-process / post-L1
reads. Store a JSON-safe projection and rehydrate on read.
Non-JSON-native fields: timestamp (Date↔ISO string) and aggregate
(BigNumber↔string). localDate is already a plain string and rides unchanged.
L2 round-trips through JSON, so
timestamp(Date) arrives as a string andaggregate(BigNumber) loses its runtime shape on cross-process / post-L1 reads. Store a JSON-safe projection and rehydrate on read.Non-JSON-native fields:
timestamp(Date↔ISO string) andaggregate(BigNumber↔string).localDateis already a plain string and rides unchanged.