# Integrações do Marketplace de Estates

## 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](https://docs.decentraland.org/decentraland/faq/#what-is-an-estate) é um grupo de [LANDs](https://docs.decentraland.org/decentraland/faq/#what-is-land) 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:

![](/files/295600a6d96f4a72d8288e74cdf9f2d1fbdb11a8)

## 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](https://github.com/decentraland/land/blob/master/contracts/estate/EstateStorage.sol#L19). 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](https://github.com/decentraland/marketplace-contracts/blob/master/contracts/marketplace/MarketplaceV2.sol#L382)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/marketplace/estates-marketplace-integrations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
