Package curated is the engine behind a curated list where being on the list costs something: anyone may list an entry by locking a deposit, anyone may challenge an entry by matching that deposit with a bond, and the loser of the challenge pays the winner.
Why a deposit
A list anybody can write to for free is a list nobody can read, because the cheapest way to be on it is to be on it a thousand times. A deposit does not make an entry good; it makes a bad entry expensive to leave standing, because somebody who disagrees can put the same amount at risk and take yours. The list is worth reading in proportion to what it would cost to pollute it.
The model
Example
1Registry every entry, plus the credit ledger the payouts land in
2Entry a key, a URL, a description, an owner, the deposit, the height
3 it was listed at, and one of three states
4Challenge a challenger, a matching bond, a deadline, and the votes
A key is unique while it is on the list (ValidKey bounds it to a slug), and a removed key is free again: a challenge that wins removes an entry, it does not burn the name forever.
The money, and why nothing is ever sent from here
This package moves no coins. Every payout is a credit in an internal ledger that the payee collects with Registry.Withdraw, which is the pull-payment shape: a realm that loops over winners and sends to each one fails entirely when one of them cannot be paid, and hands a griefer a cheap denial of service. Registry.Locked plus Registry.Owed is what the holding realm must have at its address, and a realm can assert exactly that.
Voting is sybil-prone, deliberately and visibly
Registry.Vote is one address, one vote, unweighted. An address is free, so a challenge outcome is a poll of whoever bothered to make keys, not of anybody in particular. That is not a gap this package can close: deciding who counts as a person is a different problem with a different realm behind it, r/moul/x/social/vouch, a sibling in this family. Until a vote is gated on a vouched identity, read a resolution as "nobody with a stake objected enough", not as a verdict.
What v0 does not do, in the order it should be fixed
- Voters are paid nothing. Voting costs gas and returns nothing, so the only addresses with a reason to vote are the two with money on the outcome. A share of the loser's stake for the winning side is the standard answer and it is the first thing to add.
- There is no application period: Registry.Apply lists immediately, so a bad entry is visible until somebody challenges it.
- A challenge cannot be withdrawn, and a vote cannot be changed.