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)
sequenceDiagram
  participant User_1
  participant User_2
  participant User_3
  participant L1_DAO
  participant L1_Bridge
  participant L2_Bridge
  participant L2_Collection_1

  User_1->>L1_DAO: Create vote to approve/reject Collection_1: Vote_1
  User_2->>L1_DAO: Vote "Yes" on Vote_1
  User_3->>L1_DAO: Vote "Yes" on Vote_1
  L1_DAO-->>L1_DAO: Vote_1 passed
  User_1->>L1_DAO: Enact Vote_1 lock
  L1_DAO->>L1_Bridge: Approve/Reject Collection_1
  L1_Bridge->>L2_Bridge: Approve/Reject Collection_1
  L2_Bridge->>L2_Collection_1: Approve/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)
sequenceDiagram
  participant User_1
  participant User_2
  participant User_3
  participant L1_DAO
  participant L1_Committee

  User_1->>L1_DAO: Create vote to add/remove someone from the committee: Vote_1
  User_2->>L1_DAO: Vote "Yes" on Vote_1
  User_3->>L1_DAO: Vote "Yes" on Vote_1
  L1_DAO-->>L1_DAO: Vote_1 passed
  User_1->>L1_DAO: Enact Vote_1 lock
  L1_DAO->>L1_Committee: Add/Remove someone from the committee
Manage Collections (1 transaction)
sequenceDiagram
  participant Committee_User
  participant L1_Committee
  participant L1_Bridge
  participant L2_Bridge
  participant L2_Collection_1

  Committee_User->>L1_Committee: Approve/Reject Collection_1
  L1_Committee->>L1_Bridge: Approve/Reject Collection_1
  L1_Bridge->>L2_Bridge: Approve/Reject Collection_1
  L2_Bridge->>L2_Collection_1: Approve/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)
sequenceDiagram
  participant User_1
  participant User_2
  participant User_3
  participant L1_DAO
  participant L1_Bridge
  participant L2_Bridge
  participant L2_Committee

  User_1->>L1_DAO: Create vote to add/remove someone from the committee: Vote_1
  User_2->>L1_DAO: Vote "Yes" on Vote_1
  User_3->>L1_DAO: Vote "Yes" on Vote_1
  L1_DAO-->>L1_DAO: Vote_1 passed
  User_1->>L1_DAO: Enact Vote_1 lock
  L1_DAO->>L1_Bridge: Add/Remove someone from the committee
  L1_Bridge->>L2_Bridge: Add/Remove someone from the committee
  L2_Bridge->>L2_Committee: Add/Remove someone
Manage Collections (1 transaction)
sequenceDiagram
  participant Committee_User
  participant L2_Committee
  participant L2_Collection_1

  Committee_User->>L2_Committee: Approve/Reject Collection_1
  L2_Committee->>L2_Collection_1: Approve/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









clusterL2

L2 Main chain


clusterL1

L1 Ethereum



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

sequenceDiagram
  participant Creator_1
  participant Creator_2
  participant Creator_3
  participant Creator_4
  participant Creator_5
  participant L2_Collection_Curator

  Creator_5->>L2_Collection_Curator: Stake X MANA to publish collection_1
  L2_Collection_Curator ->> L2_Collection_1: Create collection
  Creator_1->>L2_Collection_Curator: Stake Z MANA to challenge collection_1
  Creator_2->>L2_Collection_Curator: Vote "Yes" on the collection_1 challenge: weight 1
  Creator_3->>L2_Collection_Curator: Vote "Yes" on the collection_1 challenge: weigh 1
  Creator_4->>L2_Collection_Curator: Vote "No" on the collection_1 challenge: weight 1
  Creator_5->>L2_Collection_Curator: Vote "No" on the collection_1 challenge: weight 0.1

  Creator_1-->>L2_Collection_Curator: Resolve challenge
  Note right of L2_Collection_Curator: Challenge resolved: Passed (YES: 2 / No: 1.1)
  L2_Collection_Curator->>L2_Collection_1: Act 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. Final