Protocol
Block ...
Regime ...
ZK Verified
RESOLVE — TRIGGER Work Function

Register a claim.
The chain decides.

Name a ticker. Name a condition. Name a block. The chain evaluates the ZK-proven regime state at that block and returns MATCH or MISS. No oracle. No trusted executor. TRIGGER is the input. SETTLE is the automatic return value. One user action.

Register a Trigger Whitepaper
How It Works

Condition. Target block. Chain fires.

Register a regime condition against a future block number. At that block, the chain state is computed, ZK-proven, and compared to the registered condition. Match fires the trigger. No off-chain logic.

Step 01

Register condition

POST a wallet, target block, ticker, and expected regime to the TRIGGER endpoint. 5 MKV per registration.

Step 02

Chain reaches target

At the target block, the protocol computes regime state via Viterbi + ZK proof. This is the same computation that validates every block.

Step 03

Condition resolves

Regime matches your condition: trigger fires (MATCH). Regime does not match: trigger resolves MISS. Either way, the result is ZK-proven and permanent.

Regime States

What a trigger can target.

Every block produces a regime classification across the tracked tickers. A trigger condition specifies a ticker and an expected regime at a target block.

MARKUP
Trending advance. High transition probability to continuation.
DISTRIBUTION
Topping structure. Elevated probability of regime flip.
MARKDOWN
Trending decline. Continuation state until reversal proof.
ACCUMULATION
Base-building. Pre-markup state with compressed volatility.
NEUTRAL
No dominant regime. Mixed transition probabilities.
TRANSITION
Regime flip in progress. Highest uncertainty state.

Supported tickers: QQQ, SPY, USO, GLD, TLT, XLE, FXE, VIX.

Quickstart

Register a trigger.

Python SDK
from markovian import MarkovianClient
 
client = MarkovianClient()
 
# check current regime before registering
regime = client.regime("QQQ")
print(regime["regime"], regime["confidence"])
 
# register a trigger condition
# fires if QQQ is in MARKUP at block 130000
result = client.register_trigger(
  wallet="your_wallet_address",
  ticker="QQQ",
  target_block=130000,
  condition="MARKUP"
)
 
print(result["trigger_id"]) # reference ID
print(result["target_block"]) # 130000
print(result["status"]) # PENDING
 
# check status after target block
status = client.trigger_status(result["trigger_id"])
print(status["result"]) # MATCH or MISS
print(status["proof"]) # ZK proof of resolution
curl — register
curl -X POST https://api.quantsynth.net/trigger/register \
  -H "Content-Type: application/json" \
  -d '{"wallet":"addr","ticker":"QQQ","target_block":130000,"condition":"MARKUP"}'
API Reference

Endpoints

Method Endpoint Description
POST /trigger/register Register a trigger condition. Body: {"wallet","ticker","target_block","condition"}. Returns trigger_id, status: PENDING. 5 MKV.
GET /trigger/{id} Status of a registered trigger. Returns status (PENDING / MATCH / MISS), result_block, proof, zk_valid.
GET /triggers/{wallet} All triggers registered to a wallet. Returns array ordered by target_block.
GET /regime/{ticker} Current regime state for a ticker. Returns regime, confidence, block, zk_valid.
Why No Executor Is Needed
ResolutionChain state at target block— computed deterministically from block data
ProofBN128 Schnorr sigma— same ZK construction as PoW validity
AnchorMerkle root + Bitcoin— immutable after block confirmation
Trust modelZero— no committee, no reporter, no oracle
Two Functions

Two functions. One chain.

COMMIT

Lock data to the chain. ZK-committed. Merkle-rooted. Bitcoin-anchored. Unforgeable. Permanent.

stamp.markovianprotocol.com →
RESOLVE

Register a claim against a future block. TRIGGER is the input. SETTLE is the automatic verdict. No oracle.

trigger.markovianprotocol.com →