ADR-15: L1 & L2 Collections Approval Flow

More details about this document
Latest published version:
https://adr.decentraland.org/adr/ADR-15
Feedback:
GitHub decentraland/adr (pull requests, new issue, open issues)
Edit this documentation:
GitHub View commits View commits on githistory.xyz

Context and Problem Statement

A way to moderate the content of the Decentraland collections is needed to prevent spam, abuse, clone and copyright. The Decentraland's collections will be created in a L2, where the expected cost of creating a collection is (almost) 0 USD.

This document presents alternatives on how Decentraland collection moderation will work.

This document use as base a committee/board explained here: https://forum.decentraland.org/t/proposal-wearables-committee-of-curators/320

Alternatives

Alternative 1. Entity in L1 moderates collections in L2

The management of L2's collections could be handle by the DAO or by a special on-chain entity.

clusterL1 L1 Ethereum clusterL2 L2 Main chain bridge_l1 Bridge L1 bridge_l2 bridge L2 bridge_l1->bridge_l2 entity Entity entity->bridge_l1  Act on L2    bridge_l2->bridge_l1 collection_1 Collection_1 L2 bridge_l2->collection_1 approve/reject collection_2 Collection_2 L2 bridge_l2->collection_2 approve/reject collection_3 Collection_3 L2 bridge_l2->collection_3 approve/reject collection_4 Collection_4 L2 bridge_l2->collection_4 approve/reject

With DAO

Entity = DAO

Manage Collections ( > 2 transaction)
L2_Collection_1L2_BridgeL1_BridgeL1_DAOUser_3User_2User_1L2_Collection_1L2_BridgeL1_BridgeL1_DAOUser_3User_2User_1Create vote to approve/reject Collection_1: Vote_1Vote "Yes" on Vote_1Vote "Yes" on Vote_1Vote_1 passedEnact Vote_1 lockApprove/Reject Collection_1Approve/Reject Collection_1Approve/Reject

With Committee/Board

Entity = Committee smart contract which will check if the sender of the transaction has balance of an specific token controlled by the Dencetraland's DAO as the SAB token

Add/Remove Members ( > 2 transaction)
L1_CommitteeL1_DAOUser_3User_2User_1L1_CommitteeL1_DAOUser_3User_2User_1Create vote to add/remove someone from the committee: Vote_1Vote "Yes" on Vote_1Vote "Yes" on Vote_1Vote_1 passedEnact Vote_1 lockAdd/Remove someone from the committee
Manage Collections (1 transaction)
L2_Collection_1L2_BridgeL1_BridgeL1_CommitteeCommittee_UserL2_Collection_1L2_BridgeL1_BridgeL1_CommitteeCommittee_UserApprove/Reject Collection_1Approve/Reject Collection_1Approve/Reject Collection_1Approve/Reject

Alternative 2. DAO in L1 manage an entity, moderation happens in L2

The management of L2's collections will be done by an Entity in L2. The Entity will be managed by the Decentraland's DAO.

clusterL1 L1 Ethereum clusterL2 L2 Main chain bridge_l1 Bridge L1 bridge_l2 bridge L2 bridge_l1->bridge_l2 dao DAO dao->bridge_l1  Manage entity    bridge_l2->bridge_l1 entity Entity bridge_l2->entity  Manage entity    collection_1 Collection L2 entity->collection_1 approve/reject collection_2 Collection L2 entity->collection_2 approve/reject collection_3 Collection L2 entity->collection_3 approve/reject collection_4 Collection L2 entity->collection_4 approve/reject

Use cases

Entity = Committee smart contract which will check if the sender of the transaction is part of the committee chosen on L1. If so, it will forward the message to the collections

Add/Remove Members ( > 2 transaction)
L2_CommitteeL2_BridgeL1_BridgeL1_DAOUser_3User_2User_1L2_CommitteeL2_BridgeL1_BridgeL1_DAOUser_3User_2User_1Create vote to add/remove someone from the committee: Vote_1Vote "Yes" on Vote_1Vote "Yes" on Vote_1Vote_1 passedEnact Vote_1 lockAdd/Remove someone from the committeeAdd/Remove someone from the committeeAdd/Remove someone
Manage Collections (1 transaction)
L2_Collection_1L2_CommitteeCommittee_UserL2_Collection_1L2_CommitteeCommittee_UserApprove/Reject Collection_1Approve/Reject

Alternative 3. Collections curated by staking and challenging

The management of L2's collections will be done by creator in L2. Protocol parameters will be handled by the DAO in L1

clusterL1 L1 Ethereum clusterL2 L2 Main chain bridge_l1 Bridge L1 bridge_l2 bridge L2 bridge_l1->bridge_l2 dao DAO dao->bridge_l1  Set protocol parameters    collections_curator Collections Curator bridge_l2->collections_curator Set protocol parameters               collection_1 Collection L2 collections_curator->collection_1 approve/reject collection_2 Collection L2 collections_curator->collection_2 approve/reject collection_3 Collection L2 collections_curator->collection_3 approve/reject collection_4 Collection L2 collections_curator->collection_4 approve/reject creator_1 creator creator_1->collections_curator  Publish/Vote/Challenge creator_2 creator creator_2->collections_curator  Publish/Vote/Challenge creator_3 creator creator_3->collections_curator  Publish/Vote/Challenge creator_4 creator creator_4->collections_curator  Publish/Vote/Challenge

Submit a collection

L2_Collection_1L2_Collection_CuratorCreator_5Creator_4Creator_3Creator_2Creator_1L2_Collection_1L2_Collection_CuratorCreator_5Creator_4Creator_3Creator_2Creator_1Challenge resolved: Passed (YES: 2 / No: 1.1)Stake X MANA to publish collection_1Create collectionStake Z MANA to challenge collection_1Vote "Yes" on the collection_1 challenge: weight 1Vote "Yes" on the collection_1 challenge: weigh 1Vote "No" on the collection_1 challenge: weight 1Vote "No" on the collection_1 challenge: weight 0.1Resolve challengeAct based on challenge outcome

There are two kinds of challenge: PAUSE, and CLAIM a collection.

The PAUSE challenge should use a small % of the staked MANA.

The CLAIM challenge should use 100% of the staked MANA.

DEPRECATED

Pause example:

Claim example:

DEPRECATED

Reject example

Decision Outcome

Alternative 1

DAO

Pros

Cons

Implications

As votes can take more than 1 week to pass through all the stages, and collections will be created dinamically and faster by users in L2.

The rejection of a collection will take longer than the grace period, leaving collections approved where they should not.

Committee DAO App

Pros

Cons

Alternative 2 ✅

Pros

Cons


Based on risk reduction (L2 is new for Decentraland) and resources cointraints we will go with the Alternative X and later, with the Alternative 3. The implementation of the alternative chosen should allow and easy way to iterate.


We decided the alternative 2 is the best approach to set the place where the governance of the collections will happen, in L2.

This decision may be revisited once we define the economics and anti-spam mechanisms that would compromise the stability and operations of the committee.

Open questions


License

Copyright and related rights waived via CC0-1.0. DRAFT Final