Skip to content

MPFS v2 Boot/End Boundary Canary

The canary proves the MPFS v2 live boundary needed to boot a cage token and then end that same token through facts-only client construction.

It runs this path:

wallet -> GET /status -> POST /facts/boot -> verifyBootFacts -> bootCageTx -> sign -> POST /tx/submit -> GET /tx/:id -> GET /tokens/:id -> GET /status -> POST /facts/end -> verifyEndFacts -> endCageTx -> sign -> POST /tx/submit -> GET /tx/:id -> GET /tokens/:id until 404

Required environment:

export MPFS_DEVNET_SERVER=/path/to/mpfs-devnet-server
export MPFS_BLUEPRINT=/path/to/mpfs/blueprint.json
export E2E_GENESIS_DIR=/path/to/devnet/genesis
export MPFS_DEVNET_PATH=/path/containing/cardano-node
export MOOG_CANARY_POLLS=240

Run:

nix run .#moog-mpfs-v2-canary

Successful output contains:

{
  "boundary": "mpfs-v2-end",
  "bootTransactionObserved": true,
  "endTransactionObserved": true,
  "tokenObservedBeforeEnd": true,
  "tokenGoneObserved": true
}

This command is release evidence only for the MPFS v2 boot/end boundary. It does not validate requester, oracle, agent, or Antithesis test-run semantics.

The CI smoke for this boundary runs the dedicated Haskell executable moog-mpfs-v2-canary. It expects the paired offchain devnet executable and its Nix-provided runtime paths:

export MPFS_DEVNET_SERVER=/path/to/mpfs-devnet-server
export MPFS_BLUEPRINT=/path/to/mpfs/blueprint.json
export E2E_GENESIS_DIR=/path/to/devnet/genesis
export MPFS_DEVNET_PATH=/path/containing/cardano-node
nix run .#moog-mpfs-v2-canary

The executable creates a deterministic MOOG wallet, patches a temporary copy of the devnet genesis to fund that wallet, starts mpfs-devnet-server, and runs the boot-then-end canary path against the live HTTP API.