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)
| Parameter | Type | Description |
|---|---|---|
vaultId | bytes32 | Links to source vault |
authorityHash | bytes20 | Co-signs all claim() calls |
rewardPerWinner | int | Fixed prize per winner |
maxWinners | int | Maximum number of prizes available |
startTimestamp | int | Competition opens. 0 = immediate. |
endTimestamp | int | Deadline. 0 = no deadline. |
NFT State (40 bytes)
Transaction Structure
All entrypoints spend covenant state fromtx.inputs[0].
| Function | Required outputs | Notes |
|---|---|---|
claim | tx.outputs[0] winner payout, tx.outputs[1] updated covenant UTXO | Uses tx.locktime for time-window checks and last_claim_timestamp. |
pause | tx.outputs[0] updated covenant UTXO | Status ACTIVE -> PAUSED. |
resume | tx.outputs[0] updated covenant UTXO | Status PAUSED -> ACTIVE. |
cancel | tx.outputs[0] authority payout | Consumes 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.locktimeif configured. winnersCount < maxWinners.proofHash != 0x00...00(proof commitment is required).
tx.outputs[0]payswinnerHashwithrewardPerWinner(BCH or FT mode by flag bit2).tx.outputs[1]must keep same covenant locking bytecode/token category.tx.outputs[1].nftCommitmentmust encode updated:total_paidwinners_countlast_claim_timestamp = tx.locktimestatus = COMPLETEDwhennewWinnersCount >= maxWinners
pause() / resume() / cancel()
Authority-only admin paths.
Pause / Resume
pauserequiresACTIVEplus cancelable flag bit0.resumerequiresPAUSED.- Both require output
0to preserve covenant bytecode/token category with updated status commitment.
- Requires status
ACTIVEorPAUSEDand cancelable flag bit0. - Computes
remainingPrizes = maxWinners - winnersCount. - Computes
remainingPool = remainingPrizes * rewardPerWinner. tx.outputs[0]must pay authority in BCH or FT mode (flag bit2).

