NFT Fraccionarios dan Seguridad al Comercio de Bienes Inmuebles
Smart Contract de un token no fungible (NFT) o ERC721:
Es un conjunto de instrucciones desplegado en el blockchain de Ethereum (o compatible con Ethereum), que contiene datos y expresiones matemáticas como funciones, una de las funciones permite crear elementos únicos y no intercambiables (no fungibles). Por ejemplo:
NFT del juego CryptoZombie_game: Ilustramos un segmento del código de una función _createZombie () que crea un elemento del juego llamado zombie:
Aquí se tienen las imágenes de tres NFT de este juego:
La función isOwner () reconoce quien es el propietario del NFT.
Al finalizar el SC enviara al NFT al dueño a través de una billetera cripto como Metamask, en una cuenta o Address.
NFT de un activo como un bien inmueble (Real Estate): Las propiedades son buenos candidatos para ser tokenizados como NFT. En lugar de conservar el título de propiedad con el abogado, el propietario puede crear un NFT para representarlo.
Hay tres términos importantes que se utilizan en este articulo:
Dueño o propietario del Smart Contract: Es la persona natural o jurídica responsable del real estate que encarga a los desarrolladores la creación de 1 NFT de ese bien inmueble que llamaremos FNFT.
Socio o co-comprador: Las personas que compran participación a través acciones o tokens que llamaremos fnft.
Acción: una acción representa una participación en la propiedad es igual a un fnft.
El Dueño y los co-compradores deben tener cada uno, una cuenta o Address del blockchain Ethereum que recibirán los tokens. Al final tendremos un ejemplo donde participan un Dueño y 3 co-compradores, 4 cuentas o direcciones Ethereum.
Paso 1: organizar los datos de la propiedad en un archivo tipo JSON (JavaScript Object Notation):
El JSON se utiliza para estructurar datos en forma de texto.
Permite el intercambio de información entre aplicaciones de manera sencilla, liviana y rápida.
The JSON file is assigned to the metadataNFT variable:
Paso 2: Con una aplicación API web3 (en JavaScript o Python) se:
Envía el archivo al InterPlanetary File System (IPFS), que es un sistema de archivo descentralizado que busca garantizar la seguridad, privacidad y resistencia a la censura de tus datos.
En el IPFS al archivo metadataNFT se le asigna un TokenURI que lo identifica de forma única. El URI es un identificador de recursos uniforme de una red (IPFS) de forma unívoca.
Paso 3: ahora el archivo con la información de la propiedad está disponible para ser requerido con un programa JavaScript y utilizado en cualquier parte del mundo para:
Publicar los datos del FNFT de la propiedad en un Marketplace como open Sea.
Utilizar el archivo en un Smart Contract ERC721.
Paso 4: Dos SC ERC721, se utilizan para generar el FNFT que representa la propiedad y los fnft que representa las acciones:
fractionalNFT.sol
fractionalClaim.sol
Smart contract fractionalNFT.sol
Este SC tiene datos, variables y funciones. A continuación, presentamos una estructura de dato y 4 funciones:
La estructura de datos _fnft {}: Los tokens fnft están representados por un numero de identificación tokenId y una dirección del Smart Contract que los acuña o crea.
El Constructor (): es una función especial que permite:
Dar el nombre al token “FractionalNFT” (su NFT tendrá su propio nombre).
El símbolo que identifica al token “FNFT” (su NFT tendrá su propio símbolo).
La función safeMint (): asigna el token FNFT a la cuenta del dueño to.
La función transferFNFToken, permite al dueño, transferir a los co-compradores las acciones de participación o tokens fnft:
Cuenta o Address de un co-comprador _to.
Los metadatos del FNFT identificado con el enlace único _tokenURI.
La cantidad de acciones a comprar _amount por cada co-comprador.
La función mint () permite crear o mintear las acciones o tokens fnft (tokens ERC20) a la Address del dueño del contrato:
De la línea 66 a la 68 asigna:
La Address del dueño del contrato _to.
El enlace único tokenURI_.
_totalFractionalTokens es igual al total de tokens fnft.
De la línea 72 a 77 el SC desarrolla las tareas: (solo el dueño del contrato o propiedad puede hacerlo).
Línea 72, se inicia la creación de los tokens fnft (TokenERC20) asociados con las acciones de la propiedad.
Línea 73, en la cuenta del dueño del contrato msg. sender, el SC acuña y envía los tokens fnft. La cantidad acuñada es _totalFractionalTokens. Si la propiedad tiene 10 acciones el SC mintea 10 tokens fnft, si tiene 100 acciones el SC mintea 100 tokens fnft.
En la línea 76 y 77, la dirección o Address del SC de los tokens fnft queda vinculada a la dirección del SC del token FNFT.
Hasta aquí el primer SC ha creado 1 token FNFT que representa la propiedad y la cantidad de tokens fnft que representan las acciones.
Smart contract fractionalClaim.sol
Este segundo SC ejecuta la tarea de distribuir los tokens fnft, lo cual hace en tres etapas o estados asignados a la variable ClaimState:
Inicio de la distribución.
Aceptación de la distribución.
Cierre de la distribución.
Etapa 1. Inicio de la distribución:
El Constructor ():
Este contrato recibe del contrato anterior los tokens fnft representados por el numero tokenID y la Address fractionalToken:
El dueño de este segundo contrato debe ser el mismo que el del primero, a través de la Address msg. sender.
Con estos tres parámetros el contrato inicia la distribución (línea 8).
Etapa 2.- aceptación o ejecución de la distribución.
La función fund ():
Crea el suministro de tokens ERC20 mediante la variable supply (línea 19).
Indica la dirección del token tokenAddress (línea 17).
El valor o monto de los fondos funds, el SC los asigna a la dirección del dueño msg.value.
Emite una notificación de que los fondos están disponibles funded () (linea20).
·El SC con estos datos llega al estado de claimState = aceptación. (línea 18).
Etapa 3.- Cierre o finalización de la distribución:
La función claim ():
En la línea 27, el dueño del contrato msg. sender, entrega al co-comprador Address(this), la cantidad de acciones _amount*1000000000000000000, o tokens comprados (los ceros representan los 18 decimales asignados a los tokens).
El SC por cada acción o token fnft, que entrega a cada co-comprador, lo va quemando o eliminando, de tal forma que es imposible entregar dos veces la misma acción o tokens fnft a otro comprador.
Cuando el SC entrega todos los tokens fnft (línea 30) se cierra, y solo el primer SC (fractionalNFT.sol) puede hacer transacciones con los tokens fnft.
Paso 5: Ejemplo de Smart Contract implementados en la red de prueba ropsten de Ethereum:
El primer SC fractionalNFT.sol puede visualizarse en el explorador ropsten de Etherscan:
Address Contract: 0x628E055d8ad209eC15aBaD0B1EC0529B45FCc2fa
Nombre del token: FractionalNFT.
Suministro: 1 FNFT.
Address o cuenta del dueño del proyecto:
0x02d4806b89913ed833010ac3282be2eaac2d2bae·Transacciones: 1.
El segundo SC fractionalClaim.sol también puede visualizarse en el explorador ropsten de Etherscan:
Address Contract: 0xfBc0120197DA5Aa78e6336feC2790F767645e53c
Nombre del token: FNFToken.
Suministro: 0 FNFT (este SC no es el creador sino el distribuidor)
En las transacciones de este segundo SC, encontramos:
Una transacción In que recibe los 4 tokens fnft al ser acuñados.
Tres transacciones OUT que envían los fnft a los co-compradores.
Observe que un co-comprador recibe 2 tokens fnft o sea 2 partes de 4 en que se divide la propiedad.
Finalmente, el dueño puede ver en su billetera Metamask:
El toquen FNFT que representa la propiedad.
Los 4 tokens fnft (Etherscan y Metamask lo representa como FNT) que representan las 4 partes o acciones a vender
Desde su billetera a cada co-comprador o dueño de fracción a la dirección o Address que acreditaron.
El co-comprador recibe la cantidad de tokens fnft (FNT) en su billetera Metamask.