Integraciones de Estates en Marketplace

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 operaciones seguras para los usuarios.

Como quizá sepas, cada Estatearrow-up-right es un grupo de LANDsarrow-up-right y tiene un bytes hash asociado al grupo que se llama fingerprint. Cada vez que el Estate cambia al agregar o quitar 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 fingerprint del Estate 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 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 aun así quieres listarlos, 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 agrega el LAND (1,3) a Estate1. Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). Fingerprint de Estate1: hash2 (Fingerprint cambiado)

  • Bob quita el LAND (1,1) de Estate1. 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 está intentando 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) de 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ó Estate1 con 0 LANDs en él. Eso significa que Bob se adelantó a Alice (y la estafó).

Usando el fingerprint del Estate

  • Bob tiene el Estate1 con los LAND (1,1) y (1,2). Fingerprint de Estate1: hash1

  • Bob agrega el LAND (1,3) a Estate1. Estate1 tiene los LANDs: (1,1), (1,2) y (1,3). Fingerprint de Estate1: hash2 (Fingerprint cambiado)

  • Bob quita el LAND (1,1) de Estate1. 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 está intentando 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) de 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 revierte porque el contrato inteligente comprobó que el fingerprint del parámetro que envió Alice no coincidía con el fingerprint actual de Estate1 (hash3 != hash4). Esta verificación evitó que Alice comprara un Estate no deseado.

Interfaz de Fingerprint del Contrato Inteligente del Estate

El contrato inteligente del Estate es compatible con una interfaz de fingerprintarrow-up-right. Para comprobar si una orden/oferta para 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 consultar un ejemplo funcional en producción aquíarrow-up-right

Última actualización