A Recap: LAND Ownership & Deployment Permissions

LAND Ownership & Permissions

The owner concept for ERC721s and LAND

The ERC721 standard defines the concept of owner – the principal person allowed to transfer an ERC721. It also introduces the concept of approved – someone who is able to transfer an ERC721, but can’t set other allowed users. Lastly, it has the concept of approvedForAll; an owner-wide role that can transfer any ERC721 of the owner, and also set approved roles.

Transfer Role Object of the Role Who can change it
owner an nft owner(nft), approved(nft), approvedForAll(owner)
approved an nft owner(nft), approvedForAll(owner(nft))
approvedForAll an address the address itself; no need to have nfts to do this

Updating LAND

LAND in previous versions of Decentrtaland used to hold an IPFS or IPNS locator for the scene description in a field named “metadata”. It had a number of similarities with the tokenURI field in the final ERC721 spec; but currently; LAND has both: a metadata and a tokenURI. This Metadata field is deprecated, but it’s still used for the name of the tokens and their description in the marketplace.

This field introduced two extra roles initially, the updateOperator and the updateOperatorForAll ; and then a third role, updateManager, was added in 2019.

Update Role Affects Who can change it
updateOperator an nft updateManager, anyone who can transfer the NFT
updateManager an address the address itself, approvedForAll(address)

Anyone with any permission above affecting an NFT or the address of the owner can update a LAND’s content. This means that any one of these conditions is enough for address 0xMyAddress to be able to deploy to a LAND at 15,15:

  • 0xMyAddress is the owner of 15,15

  • 0xOwner is the owner of the land and has called approve("15,15", 0xMyAddress)

  • 0xOwner is the owner of the land and has called approveForAll(0xMyAddress)

  • 0xOwner is the owner of the land and has called approveForAll(0xSomeoneElse) and 0xSomeoneElse has called approve("15,15", 0xMyAddress)

  • 0xOwner has called setUpdateOperator("15,15", 0xMyAddress)

  • 0xOwner has called updateManager(0xMyAddress)

  • 0xOwner has called updateManager(0xSomeoneElse) and 0xSomeoneElse has called updateOperator("15,15", 0xMyAddress)

  • 0xOwner has called approveForAll(0xSomeoneElse) and 0xSomeoneElse has called setUpdateOperator("15,15", 0xMyAddress)

  • 0xOwner has called approveForAll(0xSomeoneElse) and 0xSomeoneElse has called updateManager(0xMyAddress)

  • 0xOwner has called approve("15,15", 0xSomeoneElse) and 0xSomeoneElse has called setUpdateOperator("15,15", 0xMyaddress)

Updating Estates

All the same names and logic applies to Estate NFTs. The Estates contract also have these five roles and the rules for updating them follow the same logic. They also allow updating their metadata, and they use the same method for determining the name of NFTs.

Metadata in the blockchain

Right now, the NFTs for LAND and Estates use a CSV-formatted description:

Field Description
name Name for the LAND or Estate, as shown in the Marketplace
description Description for the LAND or Estate
contents Link to IPFS or IPNS (not used anymore)

The use of these name and description comes into conflict with scene definitions. We should be deprecating this fairly soon, so that Scene descriptions become more of a first-class citizen.