Seguridad de un Archivo Digital de una Obra de Arte en el Blockchain.
El arte y los archivos en bases de datos tradicionales:
Veamos un archivo digital que contiene la información de una obra de arte y se almacena en una base de datos tradicional (DB):
Este archivo existe en un servidor central (computador) y tal vez en uno o dos servidores más que son de respaldo. Esta condición hace que el servidor este muy sujeto a hackeos y violaciones de seguridad que pueden alterar la integridad de un archivo.
El arte y los archivos en el blockchain:
El blockchain es una base de datos no tradicional, funciona como un libro de contabilidad de transacciones realizadas entre dos o más personas, cada página del libro representa un bloque de la cadena, que contiene al menos la siguiente información:
Numero de página o bloque.
Contenido resumido del bloque anterior en una función matemática hash.
Fecha de ejecución del bloque.
Función hash de cada transacción entre las personas.
Función hash del resumen de las transacciones.
Veamos el bloque 733,212 de la red bitcoin del 23 de abril del 2022:
Representado por el hash que codifica los datos que contiene el bloque:
Este bloque contiene 1,929 transacciones, de las cuales ilustramos 4, observe que cada transacción está codificada por su correspondiente hash:
El libro blockchain de Bitcoin está distribuido entre miles de nodos, computadoras o replicas, a marzo del 2021, habían más de 260.000 nodos completos y más de 70.000 nodos básicos, localizados geográficamente alrededor del mundo. De tal forma que, si un hacker ataca la integridad de este archivo:
Debe cambiar la información de este bloque 733,212.
Como este bloque esta interconectado con el bloque 733,211 debe cambiarlo también y cambiar a su vez todos los bloques que ese nodo o servidor tiene.
También tiene que hacer los cambios en al menos el 51% de los nodos de la red blockchain (a esto se le llama ataque del 51%), este ataque resulta muy difícil por los recursos que el hacker debe utilizar (tiempo, energía, capacidad de procesamiento).
Smart Contract de un token fungible o ERC20:
Es un conjunto de instrucciones desplegado en el blockchain de Ethereum, que cuenta con una estructura de datos preestablecida y permite una variedad de funciones, dos de ellas se ilustran a continuación:
El constructor: crea un suministro total de monedas, en este ejemplo 100000 monedas llamadas TOUR, con dos decimales (los últimos dos ceros), en el balance de la cuenta del dueño del contrato.
Send: Enviar o transferir cierta cantidad de tokens a otras cuentas o address.
En la práctica los contratos ERC20 son más complejos, incluye funciones como:
a) Quemar o eliminar tokens.
b) Autorizar o delegar la distribución de los tokens.
c) Emitir eventos como él envió de tokens a otras cuentas.
d) Cambiar la propiedad del contrato, etc.
Smart Contract de un Token no Fungible (NFT) o ERC721:
Es un conjunto de instrucciones desplegado en el blockchain de Ethereum, que además de los datos contiene una variedad de funciones, algunas de las funciones permiten crear elementos únicos y no intercambiables (no fungibles).
Veamos un ejemplo, el juego CryptoZombie_game: Ilustramos un segmento del código de una función que crea un elemento del juego llamado zombie:
Línea 21: El zombie tiene un nombre y su respectivo ADN que lo hacen único en el juego.
Línea 22: El zombie tiene un dueño, identificado por la dirección del dueño o creador del contrato.
Línea 23: Cada usuario puede tener más de 1 zombie o (NFT).
Línea 24: Se emite una notificación de que se ha creado un nuevo Zombie o NFT.
El ADN zombi: La apariencia del zombi se basará en su "ADN Zombie" el cual es un número entero de 16 dígitos:
Al igual que el ADN real, diferentes partes de este número se asignarán a diferentes rasgos. Los primeros 2 dígitos se asignan al tipo de cabeza del zombi, los segundos 2 dígitos a los ojos del zombi, etc.
A continuación, se ilustran las imágenes de 9 zombies con nombres y ADN distintos que les dan características únicas y cuyos datos en el blockchain de Ethereum constituyen 9 NFT.
Como identificar quién es el propietario(a) del NFT:
En el siguiente ejemplo de código en la línea 25, tenemos una función isOwner (), la cual verifica la identidad de quien interactúa con el contrato.
Cuando lo ejecuta el dueño retorna True y podrá ver e interactuar con el contrato.
Sino es el dueño retorna False y solo podrá ver el contrato.
Finalmente, el contrato que corresponde a un NFT especifico contendrá las funciones que cumplan con las pautas que sus creadores y desarrolladores estimen apropiadas.