Okay so Freenet 2.0 The Bad Parts:
It does state synchronization in 2 roundtrips. You don't send *everything* when synchronizing, but you have to send enough that the other end knows what patches it has that you don't have.
This is clearly not ideal when you're trying to synchronize (e.g.) gigabytes of tables. The best you can do is send:
* n: int32
* hash(updates[n])
* hash(updates[n-2..n])
* hash(updates[n-4..n-2])
* hash(updates[n-8..n-4])
* hash(updates[n-16..n-8])
...
But it's messy and not what Freenet was designed to handle. And just from looking at the code, I'm pretty much 100% certain that it stores contract state in memory. So if you're looking at doing a large table, you're going to be breaking it up into multiple contracts - which ends up being extremely wonky.

