Pablo Cibraro

My notes about software development, security and other stuff.

Introduccion a Chainlink y Oracles

Para poder entrar en detalle y entender de que se trata el proyecto ChainLink, es importante conocer primero que son los Smart Contracts.

Los Smart Contracts (o contracts) son pequeños programas que corren y mantienen estado en una red de Blockchain. Ethereum por ejemplo introdujo la idea de utilizar una maquina virtual o EVM (Ethereum Virtual Machine) en cada uno de los nodos de la red para poder interpretar y correr byte code asociado a un Smart Contract. Como las maquinas virtuales o VM que solemos conocer a traves de Java o .NET, lo que permiten es independizar la representacion final binaria de un programa de la arquitectura del procesador o sistema operativo en donde va a correr. Uno programa los Smart Contract en un lenguaje de alto nivel de su preferencia, como puede ser Solidity, y un compilador lo traduce a un lenguaje intermedio o byte code que la VM puede interpretar y compilar a su forma final en codigo maquina.

Una vez que un Smart Contract se publica en el Blockchain y se le asigna una direccion publica, el mismo puede empezar a recibir transacciones y fondos, o bien consultas. De todas formas, estos funcionan en forma aislada y la VM tambien actua en cierto modo como sandbox, no permitiendo que los mismos realice llamadas a APIs fuera de la red. En fin, lo unico que puede hacer un Smart Contract es llamar a otros Smart Contracts o reaccionar a transacciones enviadas por un agente exterior (ejemplo una aplicacion decentralizada o DApp) desde un nodo conectado al Blockchain.

Aqui entra el concepto de Oracle. Para los que recuerdan la pelicula "The Matrix", the Oracle era una mujer que sabia todo acerca de la matriz y tambien lo que ocurria fuera de la misma. La misma idea se a plica a Smart Contract. Si un Smart Contract no puede comunicarse con el mundo exterior, y solo lo puede hacer con otros contracts, porque no construir un mecanismo en el cual aplicaciones corriendo fuera del Blockchain alimentan a los mismos con informacion. Dichos contracts que acumulan informacion y se las proveen a otros corriendo en el mismo Blockchain se llaman Oracles.

Ahora entramos en el dilema del huevo y la gallina, que salio primero, el huevo o la gallina. Si un Oracle se alimenta de informacion proveniente del exterior, como podemos saber primero si esa informacion es confiable, y segundo, si proviene de una sola fuente o varias.

Ambos problemas atentan contra la idea de tener una red decentralizada y autonoma. Los contracts se vuelven dependientes de los Oracles, y si la informacion que tienen los mismos es erronea o no confiable, estamos en problemas.

ChainLink es un proyecto que trata de resolver esta problematica. Por un lado introduce un nuevo Blockchain en los cuales sus nodos actuan como Oracles y concentradores de informacion. Estos nodos juntan informacion de varias fuentes, temas y la clasifican. De esta forma tratan de atacar esos problemas recurriendo un modelo decentralizado y por otro lado, a traves de la clasificacion de la informacion, tratar de que la misma se lo mas confiable posible.

El escenario mas fuerte en el cual se utiliza la red de ChainLink es para determinar los precios de las distintas crypto monedas. Varios nodos aportan listados o feeds con los precios de las mismas, la cual se clasifica y se expone para su consumo. Si una fuente se cae o brinda informacion erronea, los nodos igualmente pueden recurrir a otras y determinar donde esta el error.

Otro punto importante es que la de red de ChainLink no depende de ninguna otra red de Blockchain. Para ello, dispone de distintos puntos de integracion para que la informacion pueda ser consumida desde las otras redes. En el caso de Ethereum por ejemplo, los nodos de ChainLink exponen informacion a traves de Smart Contracts en dicha red.

Por ultimo, la red de Chainlink utiliza un token especifico que se llama Link. Cualquiera que quiera que quiera correr un nodo para poder interactuar con la misma o implementar una nueva fuente de datos (informacion de apuestas por ejemplo), debera utilizar dicho token para enviar transacciones.