Integrações do Marketplace de Estates
Coisas importantes a ter em mente se você quiser integrar o Estate do Decentraland em 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, esse marketplace deve seguir certas regras para manter as negociações seguras para os usuários.
Como você deve saber, cada Estate é um grupo de LANDs e ele tem um bytes hash associado ao grupo que se chama fingerprint. Sempre que o Estate muda ao adicionar ou remover um LAND, seu fingerprint muda também.
Para marketplaces, especialmente os que não possuem um sistema de escrow, é 100% recomendado manter um registro do fingerprint do Estate quando alguém o lista para venda ou faz uma oferta. Dessa forma, quando a ordem/oferta for executada com sucesso, o proprietário atual não pode alterar o estate tentando front-run a execução da ordem.
Não é recomendado listar Estates vazios. O contrato inteligente do Estate possui um método getEstateSize que retorna o número de LANDs no Estate. Se o resultado for 0, recomendamos não listar esse Estate. Se você quiser listá‑los mesmo assim, verá uma imagem como esta:

Exemplo
Não usar o fingerprint do Estate
Bob tem o Estate1 com os LANDs (1,1) e (1,2). Fingerprint do Estate1: hash1
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)
Bob remove o LAND (1,1) do Estate1. O Estate1 tem os LANDs: (1,2) e (1,3). Fingerprint do Estate1: hash3 (Fingerprint alterado)
Bob coloca o Estate1 à venda. A listagem é criada onchain na Ethereum mainnet com o endereço do contrato inteligente do Estate, o id do Estate, o preço e a data de expiração.
Alice envia uma transação para comprar o Estate especificando o id do estate e o preço que espera pagar.
Bob detecta que alguém está tentando comprar seu Estate1 e envia uma transação com taxas de gas mais altas que as de Alice para remover os LANDs (1,2) e (1,3) do Estate1.
A transação de Bob é minerada primeiro. O Estate1 fica com 0 LANDs. Fingerprint do Estate1: hash4 (Fingerprint alterado)
A transação de Alice é minerada depois. Alice comprou o Estate1 com 0 LANDs. Isso significa que Alice foi front‑run (e teve o item roubado/estelionatado) por Bob.
Usando o fingerprint do Estate
Bob tem o Estate1 com os LANDs (1,1) e (1,2). Fingerprint do Estate1: hash1
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)
Bob remove o LAND (1,1) do Estate1. O Estate1 tem os LANDs: (1,2) e (1,3). Fingerprint do Estate1: hash3 (Fingerprint alterado)
Bob coloca o Estate1 à venda. A listagem é criada onchain na Ethereum mainnet com o endereço do contrato inteligente do Estate, o id do Estate, o preço e a data de expiração.
Alice envia uma transação para comprar o Estate especificando o id do estate, o preço que espera pagar e o fingerprint que ela viu (hash3).
Bob detecta que alguém está tentando comprar seu Estate1 e envia uma transação com taxas de gas mais altas que as de Alice para remover os LANDs (1,2) e (1,3) do Estate1.
A transação de Bob é minerada primeiro. O Estate1 fica com 0 LANDs. Fingerprint do Estate1: hash4 (Fingerprint alterado)
A transação de Alice é revertida porque o contrato inteligente verificou que o fingerprint no parâmetro que Alice enviou não correspondia ao fingerprint atual do Estate1 (hash3 != hash4). Essa verificação impediu que Alice comprasse um Estate indesejado.
Interface de Fingerprint do Contrato Inteligente do Estate
O contrato inteligente do Estate é compatível com uma fingerprint interface. Para verificar se uma ordem/oferta por um estate ainda é válida ou não, você pode chamar a verifyFingerprint(uint256 estateId, bytes fingerprint) função implementada no contrato inteligente do Estate. Você pode verificar um exemplo em produção funcionando aqui
Atualizado