Run NodesReferencevmschainadapter

messaging

Package messaging provides FHE-CRDT extensions for private messaging.

import "github.com/luxfi/node/vms/chainadapter/messaging"

Package messaging provides FHE-CRDT extensions for private messaging. It enables encrypted CRDTs for conversation metadata, group membership, read markers, and rate-limit counters integrated with service node storage.

Functions

SerializeConversation

func SerializeConversation(conv *Conversation) ([]byte, error)

SerializeConversation serializes a conversation to ZAP. Replaces the legacy JSON codec, which was UTF-8 unsafe (binary OR-Set tags stuffed into Go map keys).

Types

Conversation

Conversation represents an encrypted conversation with CRDT metadata

func DeserializeConversation(data []byte) (*Conversation, error)
func MergeConversations(local, remote *Conversation) *Conversation
func (c *Conversation) Hash() [32]byte

ConversationType

ConversationType defines the type of conversation

Encryptor

Encryptor provides encryption/decryption operations

MemberEntry

MemberEntry represents a member in the membership CRDT

MembershipCRDT

MembershipCRDT tracks group membership using an OR-Set CRDT

func NewMembershipCRDT() *MembershipCRDT
func (m *MembershipCRDT) Add(accountID [32]byte, role string, addedBy [32]byte) string
func (m *MembershipCRDT) GetMember(accountID [32]byte) (*MemberEntry, string, error)
func (m *MembershipCRDT) GetMembers() []*MemberEntry
func (m *MembershipCRDT) IsMember(accountID [32]byte) bool
func (m *MembershipCRDT) Merge(other *MembershipCRDT)
func (m *MembershipCRDT) Remove(tag string)

MessageStore

MessageStore manages encrypted messages with CRDT semantics

func NewMessageStore(encryptor Encryptor) *MessageStore
func (s *MessageStore) AddMember(ctx context.Context, conversationID ids.ID, accountID [32]byte, role string, addedBy [32]byte) error
func (s *MessageStore) CheckRateLimit(accountID [32]byte) error
func (s *MessageStore) CreateConversation(ctx context.Context, convType ConversationType, creatorID [32]byte, members [][32]byte) (*Conversation, error)
func (s *MessageStore) GetConversation(conversationID ids.ID) (*Conversation, error)
func (s *MessageStore) IncrementRateLimit(accountID [32]byte)
func (s *MessageStore) RemoveMember(ctx context.Context, conversationID ids.ID, accountID [32]byte, removedBy [32]byte) error
func (s *MessageStore) UpdateReadMarker(ctx context.Context, conversationID ids.ID, accountID [32]byte, lastReadID ids.ID) error

RateCounter

RateCounter tracks message counts for an account

RateLimiter

RateLimiter provides rate limiting for message sending

func NewRateLimiter(maxPerMinute, maxPerHour, maxPerDay int) *RateLimiter
func (r *RateLimiter) Check(accountID [32]byte) error
func (r *RateLimiter) Increment(accountID [32]byte)

ReadMarker

ReadMarker represents a member's read position

ReadMarkerCRDT

ReadMarkerCRDT tracks read markers using LWW registers

func NewReadMarkerCRDT() *ReadMarkerCRDT
func (r *ReadMarkerCRDT) Get(accountID [32]byte) *ReadMarker
func (r *ReadMarkerCRDT) Merge(other *ReadMarkerCRDT)
func (r *ReadMarkerCRDT) Update(accountID [32]byte, lastReadID ids.ID, lastReadTime time.Time)