CardOp

@Serializable
sealed class CardOp

A card mutation broadcast over the seam.

Encrypt and Strip carry the base sets (Encrypt.baseEncryptedBy/ Encrypt.baseStrippedBy, likewise on Strip) of the card state the sender computed the op against. A receiver reconstructs the sender's resulting CardState from them and folds it in via CardState.merge, so application is order-independent: Seam.incoming guarantees only per-sender FIFO, and ops from different senders may interleave differently at different peers.

Inheritors

Types

Link copied to clipboard
@Serializable
data class DepositKey(val player: PlayerId, val escrowedKey: EncryptedKey) : CardOp
Link copied to clipboard
@Serializable
data class Encrypt(val player: PlayerId, val newCiphertext: ByteArray, val proof: EncryptProof, val baseEncryptedBy: Set<PlayerId>, val baseStrippedBy: Set<PlayerId>) : CardOp
Link copied to clipboard
@Serializable
data class QuorumStrip(val player: PlayerId, val forMember: PlayerId, val newCiphertext: ByteArray, val proof: StripProof, val baseTrackStrippedBy: Set<PlayerId>) : CardOp

A quorum member's strip on another member's private-copy reveal track (QuorumTrack) of a partial multi-member quorum card. player stripped their layer from forMember's track; newCiphertext is the resulting track ciphertext. Broadcast like every other op — the intermediate values are ciphertexts still carrying at least forMember's layer, so making them public reveals nothing a quorum-revealed single-reader card doesn't.

Link copied to clipboard
@Serializable
data class Strip(val player: PlayerId, val newCiphertext: ByteArray, val proof: StripProof, val baseEncryptedBy: Set<PlayerId>, val baseStrippedBy: Set<PlayerId>) : CardOp