You mentioned nostr could have been built using a binary format and CRDTs in your book. Have you thought about how CRDTs could have been implemented instead of events for things like follow lists or was it just an example?
Discussion
A little bit, I'm not super proficient with CRDTs, but it's not too complex to make a Set data type. Right now follow lists are completely replaced every time, making them quite brittle. A set with add/remove operations would be very simple, with the cost of taking up way more space. I proposed this over two years ago: https://github.com/nostr-protocol/nips/pull/349
The nice thing about this is you could build follower lists more cheaply, but it would be much more expensive to build follow lists, since you'd have to download everything and reconcile it in-memory. Snapshot events could help with this, but nostr's event model is just too simple, and relays too dumb to solve this very well.