Decentralization on top of decentralization!

Decentralized apps tend to update over time. Either it is because of adding a new feature that requires protocol change (major changes in contracts) or finding a bug, etc. One example could be SigUSD V1 which was updated because of some known issues.

In a truly decentralized dapp, the community should have a vote on whether the dapp should change or not. Putting that big power in only the devs hand (possibly only one guy) doesn’t seem to be aligned with decentralization.

This is where ErgoTeam comes in! ErgoTeam will support arbitrary changing proposals for some box that is being managed by a team. This team can be a big community of users or even a small group of devs that wish to divide the power.

To have a more concrete example, let’s say a dapp stores one of the dapp’s contracts in a register of a box as SigmaProp, let’s call this box dappManager. This box can be used as dataInput in other dapp contracts that make sure the stored SigmaProp gets executed:

  val dappManager = CONTEXT.dataInputs(0) 
  val dapContract = dappManager.R4[SigmaProp].get
  dappContract && otherConditions

This dappManager box can easily be managed by ErgoTeam and be changed in an arbitrary way upon proper voting. This way, not only the deployed dapp is decentralized but also any significant changes that require a change in the protocol can be decentralized.

Who can vote and how to distribute voting tokens and to whom is not addressed here and needs separate discussions.


So is the stored SigmaProp in the dappManager box or the second box where the dappManager is used as data input? Because I am a bit confused by the example ErgoScript and the description which are not the same.


Yes, in the dappManager box.

1 Like

So SELF is the dappManager box?

Sorry it was a typo, fixed.

1 Like