Hi BET and San,
Thanks for your comments. Let me share with you the summary of our call with Ethen.
Glossary:
Owner: Sole address marked as the owner of a parcel or state.
Operator: Set of addresses with Owner privileges over one or all assets of an address (they can transfer land).
Proposed modification:
Include a method in the smart contracts handling parcels and states to allow the owner of the contract (currently the DAO) to grant/remove operator privileges over all assets of an address to another address.
/**
* @dev Sets or unsets the approval of a given operator
* An operator is allowed to transfer all tokens of the sender on their behalf
* @param _from inactive address to set the approval
* @param _to operator address to set the approval
* @param _approved representing the status of the approval to be set
*/
function setApprovalForAllByContractOwner(address _from, address _to, bool _approved) external onlyOwner {
require(_to != _from);
operatorApprovals[_from][_to] = _approved;
emit ApprovalForAll(_from, _to, _approved);
}
See the code changes on github.
Overview
This method can only be called by the DAO. If another user calls this method the operation will fail.
In order to call this function, a user needs to submit a transaction proposal to the DAO. The lifecycle of a proposal process is explained in detail here and more details about the Security Advisory Board (SAB) can be found here.
The proposal once submitted will move through 3 stages: Inbox, Security Delay, and Community Voting. The proposal can be revoked by the community or the SAB at any stage. Moreover, if nobody votes the proposal will be revoked automatically.
That’s why every proposal should be in the companion of a forum post providing evidence to the community so they can signal their consent. Note that we are delegating to our community what is the criteria to approve or reject the proposal. We should define what is enough evidence to prove a case. No time or past-interactions restrictions have been included in the smart contract.
As a community, we should agree on the minimum evidence needed to approve a request. It would be great to have some community champions that volunteer to verify the evidence.
For example, we could agree on the following as minimum evidence:
- The address is inactive for X months (we check it on Etherscan).
- A signed message from an address that had contact with the inactive.
Human verification vs Smart Contract
This process requires the community to vote every time someone needs to reclaim access to their land. Just like we have to vote to include a point of interest to the map or ban a name.
We could eventually add a shorter path that auto-validates the evidence and does not require voting, however it requires more engineering effort and knowledge about the problem.
What are the next steps?
We need to add tests to the pull request and get an external code review to ensure the code is ok. Then it will be merged into Decentraland’s main repository and new contracts will be deployed to the Ethereum network by the Decentraland Foundation. A new vote will start to upgrade the contracts to the new version.
What happens if the vote passes?
Once the upgrade is approved, Ethen will be able to submit his proposal to assign operator privileges to an address he owns. If the proposal passes, he will recover his land.
Ethen will be able to transfer the land to a new address or just keep it as it is. Note: It may be expensive to transfer a lot of land plots and states.
Thoughs? Questions?