Skip to main content

Introduction

Curate V2 is a decentralized system for creating community-curated lists on the blockchain. Anyone can submit items, challenge entries, and participate through economic incentives. When disputes arise, they’re resolved through Kleros Court.

Deployment

ComponentPurpose
CurateV2Implementation contract
CurateFactoryDeploys new registries via ERC-1167 proxies
CurateViewBatch query helper
Deploy your own registry through the CurateFactory contract. Each registry is an independent ERC-1167 minimal proxy.

Key Improvements from V1

FeatureV1V2
DeploymentFull contract per registryERC-1167 minimal proxy pattern
GovernanceSingle governor roleSeparate governor and relayer roles
ArbitrationParameters can change during disputeVersioned arbitration parameters preserved
QueriesIndividual callsEnhanced batch queries via View contract

System Architecture


Item Lifecycle

Items in Curate V2 follow a state machine with four possible states:

Status Definitions

StatusDescription
AbsentItem does not exist in the registry
RegistrationRequestedItem submission pending, can be challenged
RegisteredItem is active in the registry
ClearingRequestedRemoval pending, can be challenged

Challenge Mechanism

1

Request Submitted

User submits item (registration) or removal request with required deposit.
2

Challenge Period

Anyone can challenge during the challenge period by paying the challenge deposit.
3

Dispute Created

If challenged, a dispute is created in Kleros Court.
4

Resolution

Winner receives both deposits. Loser forfeits their deposit.

Economic Model

Deposits Required

ActionDeposit Type
Submit itemSubmission deposit + Arbitration cost
Remove itemRemoval deposit + Arbitration cost
Challenge submissionSubmission challenge deposit + Arbitration cost
Challenge removalRemoval challenge deposit + Arbitration cost

Example Flow

User submits item:
  Pays: submissionDeposit + arbitrationCost

Someone challenges:
  Pays: challengeDeposit + arbitrationCost

Contract holds: submissionDeposit + challengeDeposit
Arbitrator gets: 2 × arbitrationCost

Winner receives: all held deposits

Role Permissions

  • Change arbitrator and arbitration parameters
  • Update base deposits
  • Modify challenge period duration
  • Set connected lists
  • Update list metadata
  • Add/remove items directly (bypass challenge period)
  • Add items directly (bypass challenge period)
  • Remove items directly (bypass challenge period)
  • Useful for automated integrations
  • Submit item requests
  • Submit removal requests
  • Challenge requests
  • Execute unchallenged requests
  • Submit evidence

Arbitration Parameter Versioning

Key Insight: arbitrationParamsIndex ensures disputes use the arbitration settings that were active when the request was created, even if governance later changes them.
struct ArbitrationParams {
    IArbitratorV2 arbitrator;
    bytes arbitratorExtraData;
    EvidenceModule evidenceModule;
}
This prevents governance from affecting ongoing disputes by changing arbitrator settings mid-dispute.

Use Cases

Token Lists

Community-curated lists of legitimate tokens, filtering out scams

NFT Collections

Verified collections and authenticity registries

Address Tags

Label addresses with warnings, categories, or metadata

Content Moderation

Decentralized content curation and filtering

Resources