Stag Hunt
Post A Hunt
  • Explore
  • Message
  • Post
  • Alerts
  • Me
stag huntKaspa-native coordination.DiscoverHow it worksRefsPost a huntTerms
← Back to explore
πŸ”’ Non-custodialβ†©οΈŽ Permissionless refundsπŸ” Verifiable on-chain

Your money is held
by code, not a company.

Every coin on Stag Hunt lives inside an on-chain Kaspa covenantβ€” a tiny program compiled into the very UTXO that holds your KAS. It can do exactly two things: pay the winner when a hunt is delivered, or refund you when it isn't. No admin key. No custodial wallet. No third path.

See the actual script ↓How a hunt works
🚫

Stag Hunt never holds your KAS

The platform holds no keys that can move funds. Your coins sit in a P2SH covenant address the moment you contribute β€” governed only by the script.

♾️

Refunds survive us

The refund branch needs no signature and no server. If every referee β€” and Stag Hunt itself β€” vanished tomorrow, you could still reclaim your funds after the deadline.

πŸ’―

100% goes to the winner

The payout branch can only pay the verified winner. There is no fee output the script will accept, so no cut can be skimmed on-chain.

πŸ”

Auditable before you fund

Every hunt exposes its compiled redeem script, quorum, and refund DAA. You can verify the exact rules before committing a single coin.

The life of a contribution

One UTXO, two possible endings

1
You fund a per-backer address

When you back a hunt, Stag Hunt compiles a redeem script just for you and hands you its P2SH address. Your KAS pays straight into it.

2
KAS locks into the covenant

From this moment the coins can only move the way the script allows. Baked in: your refund address, and the frozen M-of-N referee committee.

then exactly one of…
βœ…

Delivered β†’ pays the winner

  • β€’A quorum of the frozen referees co-sign a release transaction.
  • β€’Anyone can broadcast it once M signatures exist.
  • β€’100% of the pot lands at the winner's payout address.
β†©οΈŽ

Times out β†’ refunds you

  • β€’After the deadline DAA score, the timelock branch unlocks.
  • β€’No signature required β€” anyone can broadcast your refund.
  • β€’Funds return to the exact address baked in at fund time.
Under the hood

The two spend paths, precisely

Payout branch β€” OP_IF

The winner is paid by an M-of-N Schnorr multisig of the hunt's frozen referee pubkeys. The threshold is a simple majority β€” M = floor(N / 2) + 1 β€” so a 5-referee hunt needs 3 signatures, a 3-referee hunt needs 2.

Referees sign partial signatures off-chain. Once M of them exist, anyone can assemble and broadcast the release transaction β€” the referees never need to be online at the same moment, and no coordinator holds the funds.

Refund branch β€” OP_ELSE

Guarded by OP_CHECKLOCKTIMEVERIFY against a fixed Kaspa DAA score (the deadline). Before the deadline this path is dead; after it, it opens to everyone.

The script then pins the output: the refund transaction must have exactly one output, and that output's script must equal the address you committed at fund time. So even though anyone may broadcast it, the coins can only ever land in your wallet.

The real thing

The redeem script, line by line

This is the actual covenant compiled for every contribution β€” an OP_IF / OP_ELSE switch. The spender pushes a boolean to pick a branch. Nothing else can move the coins.

hunt-covenant.redeem
OP_IF ; ── PAYOUT: refs co-sign a release ──
  OP_<M> <pk₁> <pkβ‚‚> … <pk_N> OP_<N> OP_CHECKMULTISIG
OP_ELSE ; ── REFUND: permissionless after deadline ──
  <T_hunt_end_daa> OP_CHECKLOCKTIMEVERIFY
  OP_TXOUTPUTCOUNT OP_1 OP_EQUALVERIFY ; exactly one output
  OP_0 OP_TXOUTPUTSPK <backer_spk> OP_EQUAL ; …paying only you
OP_ENDIF
OP_CHECKMULTISIG

Verifies M valid Schnorr signatures against the N frozen referee pubkeys. Pubkeys are sorted KIP-39-canonically so signatures line up with the redeem's iteration order.

OP_CHECKLOCKTIMEVERIFY

Blocks the refund until the chain's DAA score passes the deadline. Kaspa's CLTV consumes the locktime operand β€” no trailing OP_DROP, unlike Bitcoin.

OP_TXOUTPUTCOUNT Β· OP_1

Forces the refund transaction to carry a single output, so no sneaky extra output can siphon change elsewhere.

OP_TXOUTPUTSPK Β· OP_EQUAL

Introspects the spending transaction and asserts output 0 pays the exact script pubkey you committed. This is what binds the refund to your address.

Spec sheet

The parameters, at a glance

Holding address
Pay-to-Script-Hash (P2SH), one per backer per hunt
Signature scheme
BIP-340 x-only Schnorr, 32-byte pubkeys
Quorum
Simple majority β€” M = floor(N / 2) + 1
Referee pool size
1 to 13 referees per hunt
Timelock
OP_CHECKLOCKTIMEVERIFY on a Kaspa DAA score (8-byte LE u64)
Refund window
Opens ~3 days after claims close (a grace window for referees to sign)
Redeem-script cap
Fits in Kaspa's 520-byte element limit (grows ~33 bytes per referee)
Platform keys
None β€” the platform can neither sign nor redirect funds
πŸ”¬

Don't trust β€” verify

Because reviewable code holds the money instead of a company, the safety of your funds rests on math you can audit rather than a promise. On any hunt, open View the on-chain covenant to inspect the committed referee committee, the exact quorum, and the refund DAA β€” before you contribute a single coin.

Browse hunts β†’
This page documents Stag Hunt's covenant design so participants can evaluate the mechanism that governs funding, payouts, and refunds before taking part. Contributing is always at your own discretion and risk.