Integraciones del Marketplace de Estates
Cosas importantes a tener en cuenta si quieres integrar el Estate de Decentraland en tu marketplace
Integrando el Estate de Decentraland en tu Marketplace
El Estate de Decentraland es un NFT compatible con ERC721 y funciona en Ethereum Mainnet. Por lo tanto, muchos marketplaces de terceros pueden comerciarlos. Para hacerlo, este marketplace debe seguir ciertas reglas para mantener las operaciones seguras para los usuarios.
Como sabrás, cada Estate es un grupo de LANDs y tiene un bytes hash asociado al grupo que se llama fingerprint. Cada vez que el Estate cambia al añadir o quitar un LAND, su fingerprint también cambia.
Para los marketplaces, especialmente los que no tienen un sistema de custodia, se recomienda 100% tener un registro del fingerprint del Estate cuando alguien lo pone en venta o hace una oferta. De esa forma, cuando la orden/oferta se ejecuta con éxito, el propietario actual no puede cambiar el estate intentando front-runear la ejecución de la orden.
No se recomienda listar Estates vacíos. El contrato inteligente del Estate tiene un método getEstateSize que devuelve el número de LANDs en el Estate. Si el resultado es 0, recomendamos no listar ese Estate. Si deseas listarlos de todos modos, verás una imagen como esta:

Ejemplo
No usar el fingerprint del Estate
Bob tiene el Estate1 con los LAND (1,1) y (1,2). Fingerprint de Estate1: hash1
Bob añade el LAND (1,3) al Estate1. El Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). Fingerprint de Estate1: hash2 (Fingerprint cambiado)
Bob elimina el LAND (1,1) del Estate1. El Estate1 tiene los LANDs: (1,2) y (1,3). Fingerprint de Estate1: hash3 (Fingerprint cambiado)
Bob pone a la venta el Estate1. La lista se crea onchain en Ethereum mainnet con la dirección del contrato inteligente del Estate, el id del Estate, el precio y la fecha de expiración.
Alice envía una transacción para comprar el Estate especificando el id del estate y el precio que espera pagar.
Bob detecta que alguien intenta comprar su Estate1 y envía una transacción con tarifas de gas más altas que las de Alice para quitar los LANDs (1,2) y (1,3) del Estate1.
La transacción de Bob se mina primero. Estate1 tiene 0 LANDs. Fingerprint de Estate1: hash4 (Fingerprint cambiado)
La transacción de Alice se mina después. Alice compró el Estate1 con 0 LANDs. Eso significa que Alice fue front-runeada (y robada/estafada) por Bob.
Usando el fingerprint del Estate
Bob tiene el Estate1 con los LAND (1,1) y (1,2). Fingerprint de Estate1: hash1
Bob añade el LAND (1,3) al Estate1. El Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). Fingerprint de Estate1: hash2 (Fingerprint cambiado)
Bob elimina el LAND (1,1) del Estate1. El Estate1 tiene los LANDs: (1,2) y (1,3). Fingerprint de Estate1: hash3 (Fingerprint cambiado)
Bob pone a la venta el Estate1. La lista se crea onchain en Ethereum mainnet con la dirección del contrato inteligente del Estate, el id del Estate, el precio y la fecha de expiración.
Alice envía una transacción para comprar el Estate especificando el id del estate, el precio que espera pagar, y el fingerprint que vio (hash3).
Bob detecta que alguien intenta comprar su Estate1 y envía una transacción con tarifas de gas más altas que las de Alice para quitar los LANDs (1,2) y (1,3) del Estate1.
La transacción de Bob se mina primero. Estate1 tiene 0 LANDs. Fingerprint de Estate1: hash4 (Fingerprint cambiado)
La transacción de Alice es revertida porque el contrato inteligente comprobó que el fingerprint en el parámetro que Alice envió no coincidía con el fingerprint actual del Estate1 (hash3 != hash4). Esta comprobación impidió que Alice comprara un Estate no deseado.
Interfaz de Fingerprint del Contrato Inteligente del Estate
El contrato inteligente del Estate cumple con una fingerprint interface. Para comprobar si una orden/oferta por un estate sigue siendo válida o no, puedes llamar a la verifyFingerprint(uint256 estateId, bytes fingerprint) función implementada en el contrato inteligente del Estate. Puedes ver un ejemplo en producción funcionando aquí
Última actualización