nips/1078.md
2023-07-15 19:05:05 +08:00

1.7 KiB

NIP-1078

Arbitrary custom app data

draft optional author:BlowaterNostr

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.

Format

Private Configs

Private config should be encrypted using Kind-4's algorithm and stored in content. Technically the plain text content can be in any format, but it's best to use a JSON format of the following shape

content: {
  "client": "the client name, url for web client or NIP-89 identifier"
  ... the rest can be whatever the client author decides to be.
}

Public Configs

Similar to NIP-78, configs should be stored in tags and can be anything.

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

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.

Implementations

For example, in Blowater, 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.

Many other operations are best implemented as CRDTs as well.