For the complete documentation index, see llms.txt. This page is also available as Markdown.

Integraciones de Marketplace de Estates

Cosas importantes que debes 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 Marketplace de terceros pueden comerciar con ellos. Para hacerlo, este Marketplace debe seguir ciertas reglas para mantener las transacciones seguras para los usuarios.

Como quizá sepas, 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 agregar o eliminar un LAND, su fingerprint también cambia.

Para los Marketplace, especialmente los que no tienen un sistema de escrow, se recomienda al 100% tener un registro del Estate fingerprint cuando alguien lo pone a la venta o hace una oferta. De esa manera, cuando la orden/oferta se ejecuta correctamente, el propietario actual no puede cambiar el estate intentando adelantarse a la ejecución de la orden.

No se recomienda listar Estates vacíos. El smart contract 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 aun así quieres listarlo, verás una imagen como esta:

Ejemplo

No usar el fingerprint del Estate

  • Bob tiene el Estate1 con LAND (1,1) y (1,2). fingerprint del Estate1: hash1

  • Bob añade el LAND (1,3) al Estate1. El Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). fingerprint del Estate1: hash2 (Fingerprint cambiado)

  • Bob elimina el LAND (1,1) del Estate1. El Estate1 tiene los LANDs: (1,2) y (1,3). fingerprint del Estate1: hash3 (Fingerprint cambiado)

  • Bob pone a la venta el Estate1. El listado se crea onchain en Ethereum Mainnet con la dirección del smart contract 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 esperado a pagar.

  • Bob detecta que alguien está intentando comprar su Estate1 y envía una transacción con comisiones de gas más altas que las de Alice para eliminar los LANDs (1,2) y (1,3) del Estate1.

  • La transacción de Bob se mina primero. Estate1 tiene 0 LANDs. fingerprint del Estate1: hash4 (Fingerprint cambiado)

  • La transacción de Alice se mina después. Alice compró el Estate1 sin LANDs en él. Eso significa que Alice fue víctima de front-running (y fue estafada/robada) por Bob.

Usando el fingerprint del Estate

  • Bob tiene el Estate1 con LAND (1,1) y (1,2). fingerprint del Estate1: hash1

  • Bob añade el LAND (1,3) al Estate1. El Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). fingerprint del Estate1: hash2 (Fingerprint cambiado)

  • Bob elimina el LAND (1,1) del Estate1. El Estate1 tiene los LANDs: (1,2) y (1,3). fingerprint del Estate1: hash3 (Fingerprint cambiado)

  • Bob pone a la venta el Estate1. El listado se crea onchain en Ethereum Mainnet con la dirección del smart contract 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 esperado a pagar y el fingerprint que vio (hash3).

  • Bob detecta que alguien está intentando comprar su Estate1 y envía una transacción con comisiones de gas más altas que las de Alice para eliminar los LANDs (1,2) y (1,3) del Estate1.

  • La transacción de Bob se mina primero. Estate1 tiene 0 LANDs. fingerprint del Estate1: hash4 (Fingerprint cambiado)

  • La transacción de Alice se revierte porque el smart contract 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 evitó que Alice comprara un Estate no deseado.

Interfaz de fingerprint del smart contract del Estate

El smart contract del Estate es compatible con una interfaz de fingerprint. Cuando un Estate se pone a la venta o recibe una oferta, registra su fingerprint llamando a getFingerprintV2(uint256 estateId) y guarda el valor que devuelve. Para comprobar si esa orden/oferta sigue siendo válida en el momento de la ejecución, llama a verifyFingerprint(uint256 estateId, bytes fingerprint) con el valor guardado.

Guarda siempre el valor devuelto por getFingerprintV2. La versión anterior getFingerprint se mantiene solo por compatibilidad con versiones anteriores y se está retirando gradualmente: a partir del 26 de noviembre de 2026, verifyFingerprint dejará de aceptar valores generados por ella. Las nuevas integraciones deben usar getFingerprintV2.

Puedes consultar un ejemplo de producción funcional aquí.

Última actualización