From 25d071f69a649230f65805cbcc68833a8a6e2159 Mon Sep 17 00:00:00 2001 From: BlowaterNostr <127284497+BlowaterNostr@users.noreply.github.com> Date: Sat, 15 Jul 2023 00:25:28 +0800 Subject: [PATCH] Update 1078.md --- 1078.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/1078.md b/1078.md index 1c9eb9f9..76de312f 100644 --- a/1078.md +++ b/1078.md @@ -5,13 +5,16 @@ ## Nostr event -This NIP specifies the use of event kind `1078` which is almost identical to 30078 except that it's not a replacible event. +This NIP specifies the use of event kind `1078` which is almost identical to [30078](https://github.com/nostr-protocol/nips/blob/master/78.md) except that it's not a replacible event. ## Some use cases -The reason to not having a 30078 is that some clients want to implement local state changes as CRDTs, meaning support cumulative and associative mutations. +The reason to not having a 30078 is that some clients want to implement local state changes as [CRDTs](https://crdt.tech/), meaning support cumulative and associative mutations -Meaning the order of applying operations doesn't change the final result as long as the same set of operations are applied. +Cumulative and associative means the order of applying operations doesn't change the final result as long as the same set of operations are applied. +Using regular events can reserve the event/operation history thus the client can recompute the final state easily. [Figma uses CRDT to implement their vector design system.](https://www.figma.com/blog/how-figmas-multiplayer-technology-works/) + +## Implementations For example, in [Blowater](https://blowater.deno.dev), Pin/Unpin Contacts is implemented as regular events to achieve better consistency. Event set [`Pin Npub X`, `Unpin NpubX`, `Pin Npub Y`] will result in a pin list of `[Y]` no matter how the order is shifted.