L2 round-trips through JSON, so Date fields arrive as strings and BigNumber
/ Address-branded fields lose their runtime shape on cross-process / post-L1
reads. Store a JSON-safe projection and rehydrate on read.
Non-JSON-native fields: balance (BigNumber↔string), address +
tokenAccounts.MOVEUSD.address (Address↔string), createdAt / updatedAt
(Date↔ISO string — both notNull in the schema). Everything else rides the
spread unchanged.
L2 round-trips through JSON, so
Datefields arrive as strings andBigNumber/Address-branded fields lose their runtime shape on cross-process / post-L1 reads. Store a JSON-safe projection and rehydrate on read.Non-JSON-native fields:
balance(BigNumber↔string),address+tokenAccounts.MOVEUSD.address(Address↔string),createdAt/updatedAt(Date↔ISO string — bothnotNullin the schema). Everything else rides the spread unchanged.