MongoDB-backed implementation of PrismState for production use.
This implementation uses a sophisticated two-collection strategy to Debug out-of-order blockchain events:
==Collections==
'''Main Collection (events):''' Stores events with known parent relationships. Each event is stored with a rootRef field that tracks the root event (Create operation) of its chain. This enables efficient querying of all events for a DID or VDR by querying on the rootRef field.
'''Lost Collection (events_lost):''' Stores orphaned events whose parent (referenced via previousEventHash) has not yet been seen. This handles the case where Update or Deactivate operations arrive before their corresponding Create operation.
==Event Chain Tracking==
Events form chains through previousEventHash references:
- Create operations (CreateDidOP, CreateStorageEntryOP) start chains and have no previous hash
- Update/Deactivate operations reference the previous event's hash
- All events in a chain share the same
rootRef(the hash of the Create event)
When adding an event:
- If it has no
previousEventHash, it's inserted withrootRef = eventHash - If it has a
previousEventHash, we search for the parent event - If parent exists, event is inserted with parent's
rootRef - If parent is missing, event goes to lost collection for potential later recovery
Value parameters
- reactiveMongoApi
-
MongoDB connection wrapper using ReactiveMongo driver
Attributes
- Constructor
-
Creates a MongoDB-backed PRISM state
- Example
-
val mongoApi: ReactiveMongoApi = ??? val state = PrismStateMongoDB(mongoApi) for { _ <- state.addEvent(createEvent) _ <- state.addEvent(updateEvent) ssi <- state.getSSI(didSubject) } yield ssi - Companion
- object
- Graph
-
- Supertypes
-
trait Serializabletrait Producttrait Equalstrait PrismStatetrait PrismStateReadclass Objecttrait Matchableclass AnyShow all
Members list
Value members
Concrete methods
Adds event to MongoDB with automatic rootRef tracking.
Adds event to MongoDB with automatic rootRef tracking.
Implements two-collection strategy:
- Events with no
previousEventHash(Create ops) go to main collection withrootRef = eventHash - Events with
previousEventHashlook up the parent:- If parent exists, event goes to main collection with parent's
rootRef - If parent missing, event goes to lost collection
- If parent exists, event goes to main collection with parent's
Attributes
- Note
-
VoidOP operations are not supported and will fail with RuntimeException
- Definition Classes
Returns the cursor of the latest event stored in the database.
Returns the cursor of the latest event stored in the database.
Uses MongoDB sort to efficiently find the maximum EventCursor by (b, o) indices. If no events exist, returns EventCursor.init (-1, -1).
Attributes
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
Returns the lost events MongoDB collection.
Returns the lost events MongoDB collection.
Attributes
Name of the lost/orphaned events collection.
Name of the lost/orphaned events collection.
Attributes
Inherited methods
Adds an event after filtering out invalid ones.
Adds an event after filtering out invalid ones.
Only valid MySignedPrismEvent instances are added; invalid objects are silently ignored.
Attributes
- Inherited from:
- PrismState
Returns the main events MongoDB collection.
Returns the main events MongoDB collection.
Attributes
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Name of the main events collection.
Name of the main events collection.
Attributes
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Gets a specific event by its EventHash.
Gets a specific event by its EventHash.
Attributes
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Fetches all events in the chain for the given DID.
Fetches all events in the chain for the given DID.
Attributes
- Returns
-
ZIO effect that may fail with
Throwable(RuntimeException if event hash missing or type validation fails) and succeeds with sequence of DID-related MySignedPrismEvent - Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Fetches all events in the chain for the given VDR reference.
Fetches all events in the chain for the given VDR reference.
Value parameters
- refVDR
-
The VDR reference to query
Attributes
- Returns
-
ZIO effect that may fail with
Throwable(RuntimeException if event hash missing or type validation fails) and succeeds with sequence of storage-related MySignedPrismEvent - Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Returns event references for a specific SSI DID.
Returns event references for a specific SSI DID.
Attributes
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Returns event references for a specific VDR.
Returns event references for a specific VDR.
Attributes
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Gets the current SSI state.
Gets the full SSIHistory for a SSI.
Gets the VDR state with full ownership validation.
Returns the last synced block timestamp.
Returns the last synced block timestamp.
Attributes
- Returns
-
Tuple of (epoch seconds, nanoseconds)
- Note
-
Current implementation returns current time (FIXME: should track actual sync state)
- Inherited from:
- PrismStateRead
Attributes
- Inherited from:
- Product
Attributes
- Inherited from:
- Product
Returns mapping of all SSI DIDs to their event references.
Returns mapping of all SSI DIDs to their event references.
Attributes
- Note
-
TODO: make it a Stream of (DIDSubject, Seq[EventRef])
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Returns count of SSI DIDs in the state.
Returns count of SSI DIDs in the state.
Attributes
- Note
-
TODO: improve in specific implementations for better performance
- Inherited from:
- PrismStateRead
Returns mapping of all VDRs to their event references.
Returns mapping of all VDRs to their event references.
Attributes
- Note
-
TODO: make it a Stream of (RefVDR, Seq[EventRef])
- Definition Classes
-
PrismStateReadMongoDBTrait -> PrismStateRead
- Inherited from:
- PrismStateReadMongoDBTrait (hidden)
Returns count of VDRs in the state.
Returns count of VDRs in the state.
Attributes
- Note
-
TODO: improve in specific implementations for better performance
- Inherited from:
- PrismStateRead