Skip to main content

Context-aware Flipper

The previous Flipper example stores all values in logic state — a central location that requires sequential access.

Flipper logic state

With a million users flipping values, each must wait for the previous one to finish.

Actor State: Parallel Execution

MOI solves this by moving data from logic state to actor context. Each actor (user or logic) stores their own value, enabling parallel execution.

Flipper values on actor states

A million actors can flip their values simultaneously.

tip

Read more about state in Logic and Actor State.

Modified Code

Create context_flipper.coco:

context_flipper.coco
coco ContextFlipper

state actor:
value Bool

endpoint enlist Init():
mutate true -> ContextFlipper.Sender.value

endpoint dynamic Flip():
mutate value <- ContextFlipper.Sender.value:
value = !value

endpoint static Mode() -> (value Bool):
observe value <- ContextFlipper.Sender.value

endpoint dynamic Set(value Bool):
mutate value -> ContextFlipper.Sender.value

Key differences:

  • state actor instead of state logic
  • endpoint enlist to initialize actor state (one-time, like deploy for logic)
  • Access via Sender instead of Logic

Test the Code

coco compile
coco lab init

Enlist and Test

Use enlist once to initialize actor state (similar to how deploy initializes logic state):

# Enlist the sender
enlist ContextFlipper.Init()

# Check value
observe ContextFlipper.Sender.value
# → true

Multiple Ways to Observe

All these return the same value:

observe ContextFlipper.Sender.value
observe ContextFlipper.default_user.value
observe ContextFlipper.<identifier>.value

Test with Another User

register Robert
set default.sender Robert

# Enlist Robert
enlist ContextFlipper.Init()

# Each actor has their own value
observe ContextFlipper.Robert.value # → true
observe ContextFlipper.default_user.value # → still true (unchanged)

# Flip Robert's value
invoke ContextFlipper.Flip()
observe ContextFlipper.Robert.value # → false
observe ContextFlipper.default_user.value # → still true

Actor context is the foundation of parallel execution in MOI.