| ▲ | aleqs 6 hours ago | ||||||||||||||||||||||||||||
Very cool project! > We've developed a unique (AFAIK) solution to the consistency problem, every contract must define a "merge" operation for the contract's associated state. This operation must be commutative, meaning that you can merge multiple states in any order and you'll get the same end result. Where can I learn more about this? How is this different from CRDTs/CmRDTs? | |||||||||||||||||||||||||||||
| ▲ | sanity 5 hours ago | parent | next [-] | ||||||||||||||||||||||||||||
> Very cool project! Thank you! > Where can I learn more about this? If you don't mind watching a video I gave this talk back in March that should be fairly comprehensive: https://youtu.be/3SxNBz1VTE0?si=R4ifrsfEUJfvjDPx If you would prefer an article I recommend: https://freenet.org/about/news/summary-delta-sync/ > How is this different from CRDTs/CmRDTs? It's very closely related, you can view Freenet contract state as a CmRDT, where the details of the merge operation are specified in the webassembly contract. | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
| ▲ | dave1010uk 4 hours ago | parent | prev | next [-] | ||||||||||||||||||||||||||||
It looks a lot like a CvRDT (i.e. a state-based CRDT). They describe it as a commutative monoid, which means it has associativity and commutativity. CvRDTs also need idempotence, so they can handle duplicate data. Either they are idempotent too (which would make it semilattice-like), or the network protocol handles the deduplication outside of the data itself. Letting the payload/application define the merge operation is clever. I assume it would mean contracts could opt in to idempotency if it doesn't already exist. The other bit Freenet has added is doing all this with DHT routing and subscriptions, rather than a more basic peer mesh. This is very different to a blockchain and means it probably isn't suited for anything transactional. | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
| ▲ | dtj1123 6 hours ago | parent | prev [-] | ||||||||||||||||||||||||||||
I'm also curious about this. I don't understand how deletion and modification can be made commutative operations in a way that makes sense | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||