Blockchain vs. Mundo exterior

¿Quién no ha oído que un SmartContract es una versión automatizada de un contrato normal? Un contrato que automáticamente cuando ocurre una condición puede desencadenar una o varias acciones especificadas en el contrato y que esa condición puede ser una cotización en bolsa, un resultado de un partido, o cualquier servicio disponible en la red.

Sin embargo una definición de SmartContract es:

Un SmartContract es un código ejecutable que se almacena en un Blockchain, se ejecuta por las transacciones del Blockchain y lee y escribe datos contenidos el Blockchain (1)

Si solo son capaces de utilizar eventos y datos de Blockchain ¿Pueden los SmartContract interactúan con el mundo?

La primera sorpresa viene al comprobaar que Solidity (el lenguaje para crear SmartContracts) no permite invocar servicios. Pero no, no es un olvido.

Consultando al mundo

Para que los nodos de una red Blockchain puedan validar una transacción tienen que ejecutarla ellos mismos. Si esta ejecución incluye una invocación a un servicio, este servicio se verá ejecutada múltiples veces. Si durante este proceso el resultado del servicio cambiara (su valor se actualiza, el servicio no es determinista, o el servicio deja de estar disponible por las múltiples peticiones simultaneas), entonces la red podría quedar sin posibilidad de consenso, bloqueada, inservible.

Comunicando al mundo

Y si queremos notificar eventos al mundo tenemos dos opciones lógicas. Escoger un nodo para que realice la notificación o dejar que sean todos. Escoger uno no parece coherente con una red distribuida. Siempre puede haber un nodo malicioso, si lo hay seguro que se presenta voluntario.

Si se ejecuta la notificación en todos los nodos, el problema es simplemente que el servicio invocado debe soportar invocaciones (muy) duplicadas.

La complicación seria viene cuando la notificación responde, aunque sea con un acuse de recibo. En ese caso estamos en el escenario anterior, estamos consultando al mundo si nos oye.

Oráculos y agentes

La solución que se toma es utilizar programas que inyecten los datos del mundo en el BlockChain (oráculos) y programas que escuchan la red y emiten eventos cuando detectan eventos en el BlockChain y los publican al mundo (agentes o espías).

De esta manera los contratos pueden utilizar datos provenientes de fuera del BlockChain pero a un coste. A la hora de confiar, confiamos en toda la red de nodos del BlockChain y en cada agente, y en cada oráculo. Pero tenemos mecanismos para evitar Oráculos maliciosos.

Los oráculos tienen que estar implicados en los SmartContracts, al igual que ocurre en debe de ocurrir en los contratos legales. Los contratos deben de aceptar solo datos firmados por oráculos conocidos e implicados en el contrato, teniendo en cuenta que sus datos/transacciones son de autoría irrefutable. En cada SmartContract debe figurar la dirección de todos los actores autorizados, incluidos los oráculos. Los oráculos anónimos (como los boots de terceros) son el peligro.

No obstante conviene tener cuidado con otro peligro de los Oráculos. Nos alejan del Blockchain. Piensa que si solo accedes a la cadena mediante terceros, entonces la cadena no te aporta nada. Para ti, probablemente, es mejor no usarla, ya que de hecho puede que ni siquiera tengas garantías de que los terceros vayan realmente a un Blockchain.

En cuanto a los agentes, estos escuchan la red y emiten un evento al mundo cuando ocurre un evento en la cadena (en la cadena ocurre una única vez). Igual que en el caso de los oráculos, si el agente es de terceros deberíamos no confiar en el (podría ser malicioso) y acudir a la cadena, por lo menos para para verificar el dato criptográficamente firmado por su autor.

 

Anuncios

#oraculos, #smartcontracts