Integrações do Marketplace de Estates

Coisas importantes a ter em conta se quiser integrar o Estate do Decentraland no seu marketplace

Integrando o Estate da Decentraland no seu Marketplace

O Estate da Decentraland é um NFT compatível com ERC721 e funciona na Ethereum Mainnet. Portanto, muitos marketplaces de terceiros podem negociá-lo. Para isso, este marketplace deve seguir certas regras para manter as negociações seguras para os utilizadores.

Como talvez saiba, cada Estate é um grupo de LANDs e tem um bytes hash associado ao grupo, que se chama fingerprint. Sempre que o Estate muda ao adicionar ou remover um LAND, o seu fingerprint também muda.

Para marketplaces, especialmente aqueles sem um sistema de escrow, é 100% recomendado ter um registo do fingerprint do Estate quando alguém o coloca à venda ou faz uma oferta. Dessa forma, quando a ordem/oferta é executada com sucesso, o proprietário atual não pode alterar o estate ao tentar front-run à execução da ordem.

Não é recomendado listar Estates vazios. O smart contract do Estate tem um método getEstateSize que devolve o número de LANDs no Estate. Se o resultado for 0, recomendamos não listar esse Estate. Se, ainda assim, quiser listá-lo, verá uma imagem como esta:



Exemplo

Não usar o fingerprint do Estate

  • O Bob tem o Estate1 com os LAND (1,1) e (1,2). fingerprint do Estate1: hash1

  • O Bob adiciona o LAND (1,3) ao Estate1. O Estate1 tem os LANDs: (1,1), (1,2) e (1,3). fingerprint do Estate1: hash2 (Fingerprint alterado)

  • O Bob remove o LAND (1,1) do Estate1. O Estate1 tem os LANDs: (1,2) e (1,3). fingerprint do Estate1: hash3 (Fingerprint alterado)

  • O Bob coloca o Estate1 à venda. A listagem é criada onchain na Ethereum mainnet com o endereço do smart contract do Estate, o id do Estate, o preço e a data de expiração.

  • A Alice envia uma transação para comprar o Estate, especificando o id do estate e o preço esperado a pagar.

  • O Bob deteta que alguém está a tentar comprar o seu Estate1 e envia uma transação com taxas de gas mais altas do que as da Alice para remover os LANDs (1,2) e (1,3) do Estate1.

  • A transação do Bob é minada primeiro. O Estate1 fica com 0 LANDs. fingerprint do Estate1: hash4 (Fingerprint alterado)

  • A transação da Alice é minada mais tarde. A Alice comprou o Estate1 com 0 LANDs. Isso significa que a Alice foi front-runned (e roubada/enganada) pelo Bob.

Usar o fingerprint do Estate

  • O Bob tem o Estate1 com os LAND (1,1) e (1,2). fingerprint do Estate1: hash1

  • O Bob adiciona o LAND (1,3) ao Estate1. O Estate1 tem os LANDs: (1,1), (1,2) e (1,3). fingerprint do Estate1: hash2 (Fingerprint alterado)

  • O Bob remove o LAND (1,1) do Estate1. O Estate1 tem os LANDs: (1,2) e (1,3). fingerprint do Estate1: hash3 (Fingerprint alterado)

  • O Bob coloca o Estate1 à venda. A listagem é criada onchain na Ethereum mainnet com o endereço do smart contract do Estate, o id do Estate, o preço e a data de expiração.

  • A Alice envia uma transação para comprar o Estate, especificando o id do estate, o preço esperado a pagar e o fingerprint que viu (hash3).

  • O Bob deteta que alguém está a tentar comprar o seu Estate1 e envia uma transação com taxas de gas mais altas do que as da Alice para remover os LANDs (1,2) e (1,3) do Estate1.

  • A transação do Bob é minada primeiro. O Estate1 fica com 0 LANDs. fingerprint do Estate1: hash4 (Fingerprint alterado)

  • A transação da Alice é revertida porque o smart contract verificou que o fingerprint no parâmetro que a Alice enviou não correspondia ao fingerprint atual do Estate1 (hash3 != hash4). Esta verificação impediu a Alice de comprar um Estate não desejado.

Interface de fingerprint do Smart Contract do Estate

O smart contract do Estate é compatível com uma interface de fingerprint. Para verificar se uma ordem/oferta para um estate ainda é válida ou não, pode chamar a função verifyFingerprint(uint256 estateId, bytes fingerprint) implementada no smart contract do Estate. Pode consultar um exemplo funcional em produção aqui

Atualizado