Run a contest without paying the prize twice
Snapshot the standings, pay from the snapshot, mark the contest closed — all in one transaction, with the entry rules decided before it opens.
3 entries
Snapshot the standings, pay from the snapshot, mark the contest closed — all in one transaction, with the entry rules decided before it opens.
Commit to a server seed before the draw, publish it after, and let any user reproduce the result themselves. The scheme, and the mistake that makes it worthless.
Rank from a summary table rather than the raw ledger, snapshot the winners before you clear, and pay from the snapshot.