Skip to main content
BountyCovenant enforces fixed-prize competition payouts where authority co-signs every winning claim. Contract path: contracts/core/distribution/BountyCovenant.cash CashScript version: ^0.13.0

Constructor Parameters (Bytecode-Embedded)

ParameterTypeDescription
vaultIdbytes32Links to source vault
authorityHashbytes20Co-signs all claim() calls
rewardPerWinnerintFixed prize per winner
maxWinnersintMaximum number of prizes available
startTimestampintCompetition opens. 0 = immediate.
endTimestampintDeadline. 0 = no deadline.

NFT State (40 bytes)

[0]:    status
[1]:    flags
[2-9]:  total_paid (uint64)
[10-13]: winners_count (uint32)
[14-18]: last_claim_timestamp (5 bytes)
[19-39]: reserved

Transaction Structure

All entrypoints spend covenant state from tx.inputs[0].
FunctionRequired outputsNotes
claimtx.outputs[0] winner payout, tx.outputs[1] updated covenant UTXOUses tx.locktime for time-window checks and last_claim_timestamp.
pausetx.outputs[0] updated covenant UTXOStatus ACTIVE -> PAUSED.
resumetx.outputs[0] updated covenant UTXOStatus PAUSED -> ACTIVE.
canceltx.outputs[0] authority payoutConsumes campaign UTXO.

Functions

claim(sig authSig, pubkey authPubkey, bytes20 winnerHash, bytes32 proofHash)

Authority-signed winner payout. Validation
  • Authority identity/signature check.
  • Status must be ACTIVE.
  • Start/end window checks via tx.locktime if configured.
  • winnersCount < maxWinners.
  • proofHash != 0x00...00 (proof commitment is required).
Output rules
  • tx.outputs[0] pays winnerHash with rewardPerWinner (BCH or FT mode by flag bit2).
  • tx.outputs[1] must keep same covenant locking bytecode/token category.
  • tx.outputs[1].nftCommitment must encode updated:
    • total_paid
    • winners_count
    • last_claim_timestamp = tx.locktime
    • status = COMPLETED when newWinnersCount >= maxWinners

pause() / resume() / cancel()

Authority-only admin paths. Pause / Resume
  • pause requires ACTIVE plus cancelable flag bit0.
  • resume requires PAUSED.
  • Both require output 0 to preserve covenant bytecode/token category with updated status commitment.
Cancel
  • Requires status ACTIVE or PAUSED and cancelable flag bit0.
  • Computes remainingPrizes = maxWinners - winnersCount.
  • Computes remainingPool = remainingPrizes * rewardPerWinner.
  • tx.outputs[0] must pay authority in BCH or FT mode (flag bit2).