upvote
I've recently been working on this exact problem due to my desire to create puzzle challenges for Simplicity, the smart contract programming environment that I work on for my job.

Since Simplicity runs on Bitcoin-like blockchains, someone can swipe the witness data from the legitimate winner's proposed transaction, and create a new transaction (perhaps with a higher fee) using the same claim data and sending the prize to a different address.

Anyway, I ended up implementing a two-phase commit mechanism in which you pay a deposit to temporarily lock the prize so that it can only be paid out to your address. If you then make a valid claim, the prize can be paid to you; if you don't, you forfeit your deposit.

https://community.simplicity-lang.org/t/running-prize-contes...

(I think this was suggested by Russell O'Connor, the inventor of Simplicity, but it may have been a widespread idea in the smart contracts world. I don't know whether there's a straightforward way to implement it with Bitcoin Script, which is what this older prize would have needed.)

reply
There is no script.
reply
Of course there's a script; every bitcoin tx output has a script. These challenges use the standard P2PKH script, i.e.:

  scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  scriptSig: <sig> <pubKey>
https://en.bitcoin.it/wiki/Script
reply
Not every bitcoin tx output.

With taproot (P2TR), scripts are optional, and outputs can be based solely on Schnorr signatures.

reply
P2TR outputs have a script that always starts with OP_1. That script may or may not commit to a tapscript.
reply