Ir al contenido principal
Change page

Oracles

Última actualización de la página: 22 de octubre de 2025

Los oráculos son aplicaciones que producen fuentes de datos que ponen a disposición de la cadena de bloques fuentes de datos externas a la cadena para su uso en contratos inteligentes. Se necesitan, ya que los contratos inteligentes basados en Ethereum no pueden, por defecto, acceder a información almacenada fuera de la red de cadena de bloques.

Dar a los contratos inteligentes la capacidad de ejecutarse utilizando datos fuera de la cadena consigue ampliar la utilidad y el valor de las aplicaciones descentralizadas. Por ejemplo, los mercados de predicción en la cadena dependen de oráculos para proporcionar información sobre los resultados que utilizan para validar las predicciones de los usuarios. Supongamos que Alice apuesta 20 ETH sobre quién será el próximo presidente de EE.UU. En ese caso, la dapp del mercado de predicciones necesita un oráculo para confirmar los resultados de las elecciones y determinar si Alice puede recibir el pago.

Requisitos previos

Esta página asume que el lector está familiarizado con los fundamentos de Ethereum, incluidos los nodos, mecanismos de consenso y la EVM. También debe tener un buen entendimiento de los smart contracts y de la anatomía de los smart contracts, especialmente de los .

¿Qué es un oráculo de la cadena de bloques?

Los oráculos son aplicaciones que obtienen, verifican y transmiten información externa (es decir, información almacenada fuera de la cadena) a los smart contracts que se ejecutan en la blockchain. Además de «obtener» datos fuera de la cadena y transmitirlos en Ethereum, los oráculos también pueden «enviar» información desde la cadena de bloques a sistemas externos, por ejemplo, desbloqueando una cerradura inteligente una vez que el usuario envíe una tarifa a través de una transacción de Ethereum.

Sin un oráculo, un contrato inteligente estaría limitado completamente a los datos en la cadena.

Los oráculos difieren en función de la fuente de datos (una o varias fuentes), los modelos de confianza (centralizados o descentralizados) y la arquitectura del sistema (inmediato-lectura, publicación-suscripción y solicitud-respuesta). También podemos distinguir entre oráculos según si recuperan datos externos para que los utilicen contratos en la cadena (oráculos de entrada), envían información desde la cadena de bloques a aplicaciones fuera de la cadena (oráculos de salida), o realizan tareas computacionales fuera de la cadena (oráculos computacionales).

¿Por qué los contratos inteligentes necesitan oráculos?

Muchos desarrolladores ven a los contratos inteligentes como código ejecutándose en direcciones específicas en la cadena de bloques. Sin embargo, una visión más general de los smart contracts es que son programas de software autoejecutables capaces de hacer cumplir acuerdos entre partes una vez que se cumplen condiciones específicas; de ahí el término "smart contracts".

Pero usar contratos inteligentes para hacer cumplir acuerdos entre personas no es fácil, dado que Ethereum es determinista. Un sistema deterministaopens in a new tab es aquel que siempre produce los mismos resultados dado un estado inicial y una entrada particular, lo que significa que no hay aleatoriedad ni variación en el proceso de cálculo de salidas a partir de entradas.

Para lograr la ejecución determinista, las blockchains limitan a los nodos a llegar a consenso únicamente sobre preguntas binarias (verdadero/falso) usando solo datos almacenados en la propia blockchain. Ejemplos de estas preguntas incluyen:

  • “¿Firmó el propietario de la cuenta (identificado por una clave pública) esta transacción con la clave privada emparejada?”
  • “¿Esta cuenta tiene fondos suficientes para cubrir la transacción?”
  • “¿Es esta transacción válida en el contexto de este contrato inteligente?”, etc.

Si las cadenas de bloques recibieran información de fuentes externas (o sea, del mundo real), el determinismo sería imposible de lograr, evitando así que los nodos acordaran sobre la validez de los cambios en el estado de la cadena de bloques. Tomemos por ejemplo un contrato inteligente que ejecuta una transacción basada en el tipo de cambio actual ETH-USD obtenido de una API de precios tradicional. Es probable que esta figura cambie con frecuencia (por no mencionar que la API puede quedar obsoleta o hackeada), significando que los nodos ejecutando el mismo código de contrato pueden llegar a resultados diferentes.

Para una cadena de bloques pública como Ethereum, con miles de nodos alrededor del mundo procesando transacciones, el determinismo es crítico. Sin una autoridad central funcionando como una fuente de la verdad, los nodos necesitan mecanismos para llegar al mismo estado luego de aplicar las mismas transacciones. Un caso en el que el nodo A ejecuta el código de un contrato inteligente y obtiene "3" como resultado, mientras que el nodo B obtiene "7" después de ejecutar la misma transacción causaría que el consenso se rompa y eliminaría el valor de Ethereum como plataforma de computación descentralizada.

Esta situación también pone de relevancia un problema con el diseño de cadenas de bloques para extraer información de fuentes externas. Los oráculos, sin embargo, resuelven este problema tomando información de fuentes fuera de la cadena y almacenándola en la cadena de bloques para que los contratos inteligentes la consuman. Dado que la información almacenada en la cadena es inalterable y se encuentra disponible de forma pública, los nodos de Ethereum pueden usar de manera segura los datos importados desde oráculos fuera de la cadena para calcular los cambios de estado sin romper el consenso.

Para ello, un oráculo generalmente está compuesto por un contrato inteligente que se ejecuta en la cadena y algunos componentes fuera de ella. El contrato en la cadena recibe solicitudes de datos de otros contratos inteligentes, que luego pasa a un componente fuera de la cadena (llamado nodo oráculo). Este nodo de oráculo puede consultar fuentes de datos (usando interfaces de programación de aplicaciones, por ejemplo) y enviar transacciones para almacenar los datos solicitados en el almacenamiento del contrato inteligente.

Esencialmente, un oráculo de cadena de bloques es un puente entre la brecha de información entre la cadena de bloques y el entorno externo, lo que crea “contratos inteligentes híbridos”. Un contrato inteligente híbrido es aquel que funciona basado en una combinación de código de contrato en la cadena e infraestructura fuera de esta. Los mercados de predicción descentralizados son un excelente ejemplo de contratos inteligentes híbridos. Otros ejemplos podrían ser los contratos inteligentes de seguros de cosechas que pagan cuando un conjunto de oráculos determinan que se han producido ciertas condiciones meteorológicas.

¿Cuál es el problema de los oráculos?

Los oráculos resuelven un problema importante, pero también introducen algunas complicaciones, por ejemplo:

  • ¿Cómo verificamos si la información inyectada se extrajo de la fuente correcta o si fue manipulada?

  • ¿Cómo garantizamos que estos datos estén siempre disponibles y se actualicen regularmente?

El llamado "problema de los oráculos" demuestra los problemas que conlleva el uso de oráculos de cadenas de bloques para enviar entradas a contratos inteligentes. Los datos de un oráculo deben ser correctos para que un contrato inteligente se ejecute correctamente. Además, el tener que «confiar» en que los operadores de oráculos proporcionen información precisa socava la «falta de confianza» de los contratos inteligentes.

Diferentes oráculos ofrecen diferentes soluciones al problema del oráculo, que exploraremos más adelante. Los oráculos suelen ser evaluados sobre lo bien que manejan los siguientes desafíos:

  1. Corrección: Un oráculo no debe hacer que los smart contracts desencadenen cambios de estado basándose en datos offchain inválidos. Un oráculo debe garantizar la autenticidad y la integridad de los datos. Autenticidad significa que los datos se obtuvieron de la fuente correcta, mientras que integridad indica que los datos se mantuvieron intactos (es decir, no fueron alterados) antes de ser enviados onchain.

  2. Disponibilidad: Un oráculo no debe retrasar o impedir que los smart contracts ejecuten acciones y desencadenen cambios de estado. Esto significa que los datos provenientes de un oráculo deben estar disponibles bajo demanda sin interrupción.

  3. Compatibilidad de incentivos: Un oráculo debe incentivar a los proveedores de datos offchain a enviar información correcta a los smart contracts. La compatibilidad de incentivos implica atribuibilidad y responsabilidad. La atribuibilidad permite vincular una información externa a su proveedor, mientras que la rendición de cuentas vincula a los proveedores de datos con la información que proporcionan, para que puedan ser recompensados o penalizados en función de la calidad de la información proporcionada.

¿Cómo funciona un servicio de oráculo de cadena de bloques?

Usuarios

Los usuarios son entidades (es decir, contratos inteligentes) que necesitan información externa a la cadena de bloques para completar acciones específicas. El flujo de trabajo básico de un servicio de oráculo comienza con un usuario que envía una solicitud de datos al contrato del oráculo. Las solicitudes de datos generalmente responderán algunas o todas las siguientes preguntas:

  1. ¿Qué fuentes pueden consultar los nodos fuera de la cadena para obtener la información solicitada?

  2. ¿Cómo procesan los informantes la información de fuentes de datos y extraen puntos de datos útiles?

  3. ¿Cuántos nodos de oráculos pueden participar en la recuperación de los datos?

  4. ¿Cómo deben manejarse las discrepancias en los informes de oráculos?

  5. ¿Qué método se debe aplicar para filtrar las presentaciones y agregar o resumir los informes en un único valor?

Contrato de oráculo

El contrato del oráculo es el componente de la cadena de bloques para este servicio. Escucha las solicitudes de datos de otros contratos, retransmite las consultas de datos a los nodos del oráculo y transmite los datos devueltos a los contratos de los clientes. Este contrato también puede realizar algunos cálculos en los puntos de datos devueltos para producir un valor añadido que enviar al contrato solicitante.

El contrato de oráculo expone algunas funciones que los contratos de cliente invocan al realizar una solicitud de datos. Al recibir una nueva consulta, el smart contract emitirá un evento de registro con los detalles de la solicitud de datos. Esto notifica a los nodos fuera de la cadena que están suscritos al registro (generalmente utilizando algo como el comando JSON-RPC eth_subscribe), quienes proceden a recuperar los datos definidos en el evento de registro.

A continuación se muestra un ejemplo de contrato oráculoopens in a new tab de Pedro Costa. Este es un sencillo servicio del oráculo que puede consultar API fuera de la cadena, a petición de otros contratos inteligentes y almacenar la información solicitada en la cadena de bloques:

1pragma solidity >=0.4.21 <0.6.0;
2
3contract Oracle {
4 Request[] requests; //list of requests made to the contract
5 uint currentId = 0; //increasing request id
6 uint minQuorum = 2; //minimum number of responses to receive before declaring final result
7 uint totalOracleCount = 3; // Hardcoded oracle count
8
9 // defines a general api request
10 struct Request {
11 uint id; //request id
12 string urlToQuery; //API url
13 string attributeToFetch; //json attribute (key) to retrieve in the response
14 string agreedValue; //value from key
15 mapping(uint => string) answers; //answers provided by the oracles
16 mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted)
17 }
18
19 //event that triggers oracle outside of the blockchain
20 event NewRequest (
21 uint id,
22 string urlToQuery,
23 string attributeToFetch
24 );
25
26 //triggered when there's a consensus on the final result
27 event UpdatedRequest (
28 uint id,
29 string urlToQuery,
30 string attributeToFetch,
31 string agreedValue
32 );
33
34 function createRequest (
35 string memory _urlToQuery,
36 string memory _attributeToFetch
37 )
38 public
39 {
40 uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, ""));
41 Request storage r = requests[length-1];
42
43 // Hardcoded oracles address
44 r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1;
45 r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1;
46 r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1;
47
48 // launch an event to be detected by oracle outside of blockchain
49 emit NewRequest (
50 currentId,
51 _urlToQuery,
52 _attributeToFetch
53 );
54
55 // increase request id
56 currentId++;
57 }
58
59 //called by the oracle to record its answer
60 function updateRequest (
61 uint _id,
62 string memory _valueRetrieved
63 ) public {
64
65 Request storage currRequest = requests[_id];
66
67 //check if oracle is in the list of trusted oracles
68 //and if the oracle hasn't voted yet
69 if(currRequest.quorum[address(msg.sender)] == 1){
70
71 //marking that this address has voted
72 currRequest.quorum[msg.sender] = 2;
73
74 //iterate through "array" of answers until a position if free and save the retrieved value
75 uint tmpI = 0;
76 bool found = false;
77 while(!found) {
78 //find first empty slot
79 if(bytes(currRequest.answers[tmpI]).length == 0){
80 found = true;
81 currRequest.answers[tmpI] = _valueRetrieved;
82 }
83 tmpI++;
84 }
85
86 uint currentQuorum = 0;
87
88 //iterate through oracle list and check if enough oracles(minimum quorum)
89 //have voted the same answer as the current one
90 for(uint i = 0; i < totalOracleCount; i++){
91 bytes memory a = bytes(currRequest.answers[i]);
92 bytes memory b = bytes(_valueRetrieved);
93
94 if(keccak256(a) == keccak256(b)){
95 currentQuorum++;
96 if(currentQuorum >= minQuorum){
97 currRequest.agreedValue = _valueRetrieved;
98 emit UpdatedRequest (
99 currRequest.id,
100 currRequest.urlToQuery,
101 currRequest.attributeToFetch,
102 currRequest.agreedValue
103 );
104 }
105 }
106 }
107 }
108 }
109}
Mostrar todo

Nodos de oráculo

El nodo del oráculo es el componente fuera de la cadena del servicio de oráculo. Extrae información de fuentes externas, como API alojadas en servidores de terceros, y la coloca en la cadena para su consumo por parte de contratos inteligentes. Los nodos del oráculo escuchan los eventos del contrato del oráculo en la cadena y proceden a completar la tarea descrita en el registro.

Una tarea común para los nodos oráculo es enviar una solicitud HTTP GETopens in a new tab a un servicio API, analizar la respuesta para extraer los datos relevantes, formatearla en una salida legible por la blockchain y enviarla onchain incluyéndola en una transacción al contrato oráculo. También se le podría solicitar al nodo de oráculo que certifique la validez e integridad de la información enviada utilizando “pruebas de autenticidad”, las cuales exploraremos más adelante.

Los oráculos computacionales también dependen de nodos fuera de la cadena para realizar tareas computacionales que serían poco prácticas de ejecutar en la cadena, debido a los costes de gas y los límites del tamaño de bloque. Por ejemplo, el nodo de oráculo podría tener la tarea de generar una figura verificablemente aleatoria (por ejemplo, para juegos basados en la cadena de bloques).

Patrones de diseño de oráculos

Existen diferentes tipos de oráculos, entre ellos lectura inmediata, publicación-suscripción y petición-respuesta, siendo estos dos últimos los más populares entre los smart contracts en Ethereum. Aquí describimos brevemente los modelos de publicación-suscripción y solicitud-respuesta.

Oráculos de publicación-suscripción

Este tipo de oráculo expone una «fuente de datos» que otros contratos pueden leer regularmente para obtener información. En este caso se espera que los datos cambien frecuentemente, por lo que los contratos de los clientes deben estar atentos a las actualizaciones de los datos en el almacenamiento del oráculo. Un ejemplo es un oráculo que proporciona la última información de precios de ETH-USD a los usuarios.

Oráculos de petición-respuesta

Una configuración de solicitud-respuesta permite que el contrato del cliente solicite datos arbitrarios distintos de los proporcionados por un oráculo publicación-suscripción. Los oráculos de solicitud-respuesta son idóneos cuando el conjunto de datos es demasiado grande para almacenarse en el almacenamiento de un contrato inteligente, y/o los usuarios solo van a nacesitar una pequeña parte de los datos en cualquier momento.

Aunque son más complejos que los modelos de publicación-suscripción, los oráculos del tipo solicitud-respuesta son basicamente lo que describimos en la sección anterior. El oráculo tendrá un componente en la cadena que recibe una solicitud de datos y la pasa a un nodo fuera de la cadena para su procesamiento.

Los usuarios que inicien consultas de datos deben cubrir el coste de recuperar la información de la fuente fuera de la cadena. El contrato del cliente también debe de proporcionar fondos para cubrir los costos del gas incurridos por el contrato del oráculo para devolver la respuesta a través de la función callback especificada en la solicitud.

Oráculos centralizados vs. descentralizados

Oráculos centralizados

Un oráculo centralizado lo controla una única entidad responsable de agregar la información fuera de la cadena y de actualizar los datos del contrato oráculo según se solicite. Los oráculos centralizados son eficientes, ya que se basan en una única fuente de verdad. Pueden funcionar mejor en los casos en que el propietario publica directamente los conjuntos de datos en propiedad con una firma ampliamente aceptada. Sin embargo, también tienen desventajas:

Bajas garantías de corrección

Con los oráculos centralizados, no hay forma de confirmar si la información proporcionada es correcta o no. Incluso los proveedores «de buena reputación» pueden ser malos actores o verse pirateados. Si el oráculo se corrompe, los contratos inteligentes se ejecutarán en función de datos incorrectos.

Baja disponibilidad

Los oráculos centralizados no garantizan que los datos fuera de la cadena siempre estén disponibles para otros contratos inteligentes. Si el proveedor decide apagar el servicio o un hacker secuestra el componente fuera de la cadena del oráculo, su contrato inteligente está en riesgo de un ataque de denegación de servicio (DoS).

Baja compatibilidad de incentivos

Los oráculos centralizados a menudo tienen incentivos mal diseñados o inexistentes para que el proveedor de datos envíe información precisa e inalterada. Pagar a un oráculo por información precisa o correcta no garantiza honestidad. Este problema aumenta a medida que se incrementa la cantidad de valor que controlan los contratos inteligentes.

Oráculos descentralizados

Los oráculos descentralizados están diseñados para superar las limitaciones de los oráculos centralizados mediante la eliminación de puntos únicos de falla. Un servicio de oráculo descentralizado comprende múltiples participantes en una red entre semejantes que alcanzan consenso sobre los datos fuera de la cadena antes de enviarlos a un contrato inteligente.

Un oráculo descentralizado debería (idealmente) no tener permiso, no necesitar confianza y estar libre de la administración de una parte central; en realidad, la descentralización entre los oráculos está en un espectro. Existen redes de oráculos semidescentralizadas en las que cualquiera puede participar, pero con un "propietario" que aprueba y elimina nodos en función del rendimiento histórico. Tambien existen redes de oráculos totalmente descentralizadas: por lo general, se ejecutan como cadenas de bloques independientes y tienen mecanismos de consenso definidos para coordinar nodos y castigar el mal comportamiento.

El uso de oráculos descentralizados tiene los siguientes beneficios:

Altas garantías de corrección

Los oráculos descentralizados intentan lograr la corrección de los datos utilizando diferentes enfoques. Esto incluye el uso de pruebas que atestiguan la autenticidad e integridad de la información devuelta y requiere que múltiples entidades acuerden colectivamente la validez de los datos fuera de la cadena.

Pruebas de autenticidad

Las pruebas de autenticidad son mecanismos criptográficos que permiten la verificación independiente de la información recuperada de fuentes externas. Estas pruebas pueden validar la fuente de la información y detectar posibles alteraciones en los datos despues de la recuperación.

Ejemplos de pruebas de autenticidad incluyen:

Pruebas de Transport Layer Security (TLS): Los nodos oráculo suelen recuperar datos de fuentes externas utilizando una conexión HTTP segura basada en el protocolo Transport Layer Security (TLS). Algunos oráculos descentralizados utilizan pruebas de autenticidad para verificar las sesiones TLS (es decir, confirmar el intercambio de información entre un nodo y un servidor específico) y confirmar que el contenido de la sesión no se haya alterado.

Atestaciones de Trusted Execution Environment (TEE): Un entorno de ejecución confiableopens in a new tab (TEE) es un entorno computacional aislado del resto de los procesos operativos del sistema anfitrión. Los TEE garantizan que cualquier código de aplicación o datos almacenados/utilizados en el entorno informático conserven la integridad, la confidencialidad y la inmutabilidad. Los usuarios tambien pueden generar una certificación para demostrar que una instancia de la aplicación se está corriendo dentro del entorno de ejecución de confianza.

Ciertas clases de oráculos descentralizados requieren que los operadores de nodos de oráculo proporcionen certificaciones de TEE. Esto le confirma a un usuario que el operador del nodo está ejecutando una instancia del oráculo del cliente en un entrono de ejecución confiable. Los TEE evitan que los procesos externos alteren o lean el código y los datos de una aplicación; por lo tanto, esas certificaciones prueban que el nodo del oráculo ha mantenido la información intacta y confidencial.

Validación de información basada en consenso

Los oráculos centralizados se basan en una única fuente de verdad cuando proporcionan datos a contratos inteligentes, lo que introduce la posibilidad de publicar información inexacta. Los oráculos descentralizados resuelven este problema al depender de múltiples nodos de oráculo para consultar información fuera de la cadena. Al comparar datos de múltiples fuentes, los oráculos descentralizados reducen el riesgo de transmitir información inválida a los contratos en la cadena.

Los oráculos descentralizados, sin embargo, deben lidiar con discrepancias en la información obtenida de múltiples fuentes fuera de la cadena. Para minimizar las diferencias en la información y garantizar que los datos pasados al contrato del oráculo reflejen la opinión coletiva de los nodos de oráculo, los oráculos descentralizados utilizan los siguientes mecanismos:

Votar/apostar por la precisión de los datos

Algunas redes de oráculos descentralizados requieren que los participantes voten o apuesten por la precisión de las respuestas a las consultas de datos (por ejemplo., "¿Quién ganó las elecciones estadounidenses de 2020?") utilizando el token nativo de la red. Luego, un protocolo de agregación agrega los votos, las apuestas y toma la respuesta apoyada por la mayoría como la válida.

Los nodos cuyas respuestas se desvían de la respuesta mayoritaria son penalizados con la distribución de sus tokens a otros que proporcionen valores más correctos. Obligar a los nodos a proporcionar un vínculo antes de proporcionar datos incentiva las respuestas honestas, ya que se supone que son actores económicos racionales que intentan maximizar los rendimientos.

El staking/votación también protege a los oráculos descentralizados de los , donde actores maliciosos crean múltiples identidades para manipular el sistema de consenso. Sin embargo, apostar no puede prevenir "la carga gratuita" (nodos de oráculos que copian datos de otros) y "la validación diferida" (o "lazy validation", nodos de oráculos que siguen a la mayoría sin verificar la información ellos mismos).

Mecanismos de punto de Schelling

Punto de Schellingopens in a new tab es un concepto de teoría de juegos que asume que múltiples entidades siempre optarán por una solución común a un problema en ausencia de comunicación. Los mecanismos de punto de Shelling se utilizan a menudo en redes de oráculos descentralizados para permitir que los nodos lleguen a un consenso sobre las respuestas a las solicitudes de datos.

Una idea temprana para esto fue SchellingCoinopens in a new tab, un feed de datos propuesto donde los participantes envían respuestas a preguntas "escalares" (preguntas cuyas respuestas se describen por magnitud, por ejemplo, "¿cuál es el precio de ETH?"), junto con un depósito. Los usuarios que proporcionan valores entre el 25 y el 75 percentilopens in a new tab son recompensados, mientras que aquellos cuyos valores difieren mucho del valor medio son penalizados.

Si bien SchellingCoin no existe actualmente, varios oráculos descentralizados—en particular los Oráculos del Protocolo Makeropens in a new tab—utilizan el mecanismo de punto de Schelling para mejorar la precisión de los datos de oráculo. Cada oráculo Maker consiste en una red entre semejantes fuera de la cadena de nodos («intermediarios» y «fuentes») que envían los precios de mercado de los activos colaterales y un contrato «Medianizer» en la cadena que calcula la media de todos los valores proporcionados. Una vez que el periodo de atraso especificado termina, el valor medio se vuelve el nuevo precio de referencia del activo asociado.

Otros ejemplos de oráculos que usan mecanismos de punto de Schelling incluyen Chainlink Offchain Reportingopens in a new tab y Witnetopens in a new tab. En ambos sistemas, las respuestas de los nodos de oráculo en la red peer-to-peef son agregados en un único valor agregado, como una media o promedio. Los nodos son recompensados o castigados de acuerdo con la medida en que sus respuestas se alinean o se desvían del valor agregado.

Los mecanismos de punto de Schelling son atractivos, porque minimizan la huella en la cadena (solo se necesita enviar una transacción) mientras garantizan la descentralización. Esta última es posible porque los nodos deben firmar la lista de respuestas enviadas antes de que se introduzcan en el algoritmo que produce el valor medio/mediana.

Disponibilidad

Los servicios de oráculos descentralizados garantizan una alta disponibilidad de datos fuera de la cadena para los contratos inteligentes. Esto se logra descentralizando tanto la fuente de información fuera de la cadena, como los nodos responsables de transferir la información en la cadena.

Esto garantiza la tolerancia a fallas, ya que el contrato de oráculo puede confiar en múltiples nodos (que también usan múltiples fuentes de datos) para ejecutar consultas de otros contratos. La descentralización tanto en la fuente como a nivel de los operadores de nodos es fundamental: una red de nodos oráculo que sirve información obtenida de la misma fuente enfrentará el mismo problema que un oráculo centralizado.

También es posible que los oráculos basados en participaciones penalicen a los operadores de nodos que no respondan rápidamente a las solicitudes de datos. Esto incentiva significativamente a los nodos de oráculo a invertir en infraestructura tolerante a fallas y a proporcionar datos de manera oportuna.

Buena compatibilidad de incentivos

Los oráculos descentralizados implementan varios diseños de incentivos para prevenir comportamientos bizantinosopens in a new tab entre los nodos oráculo. Específicamente, logran atribuibilidad y responsabilidad:

  1. A menudo se requiere que los nodos de oráculo descentralizados firmen los datos que proporcionan en respuesta a las solicitudes de datos. Esta información ayuda a evaluar el rendimiento histórico de los nodos de oráculo, de modo que los usuarios pueden filtrar los nodos de oráculo poco fiables al hacer solicitudes de datos. Un ejemplo es el Sistema de Reputación Algorítmicaopens in a new tab de Witnet.

  2. Los oráculos descentralizados, como se explicó anteriormente, pueden requerir que los nodos pongan una participación o apuesta en su confianza en la veracidad de los datos que envían. Si la reclamación se comprueba, esta participación se puede devolver junto con recompensas por un servicio honesto. Pero también se puede acuchillar en caso de que la información sea incorrecta, lo que hace que se tenga responsabilidad.

Aplicaciones de oráculos en smart contracts

Los siguientes son casos de uso comunes de oráculos en Ethereum:

Recuperación de datos financieros

Las aplicaciones de finanzas descentralizadas (DeFi) permiten préstamos, préstamos y comercio de activos entre pares. Para ello, se suele requerir información financiera diferente, incluidos datos de tipos de cambio (para calcular el valor fiduciario de las criptomonedas o comparar los precios de los tókenes) y datos de los mercados de capital (para calcular el valor de los activos tokenizados, como el oro o el dólar estadounidense).

Un protocolo de préstamo DeFi, por ejemplo, necesita consultar los precios actuales del mercado de los activos (por ejemplo, ETH) depositados como garantía. Esto permite que el contrato determine el valor de los activos colaterales y determine cuánto puede pedir prestado del sistema.

Los populares "oráculos de precios" (como a menudo se les llama) en DeFi incluyen Chainlink Price Feeds, el Open Price Feedopens in a new tab de Compound Protocol, los Precios de Promedio Ponderado por Tiempo (TWAPs)opens in a new tab de Uniswap y los Oráculos de Makeropens in a new tab.

Los constructores deben entender las advertencias que traen estos oráculos de precios antes de integrarlos en su proyecto. Este artículoopens in a new tab proporciona un análisis detallado de lo que se debe considerar al planificar el uso de cualquiera de los oráculos de precios mencionados.

A continuación se muestra un ejemplo de cómo puede recuperar el último precio de ETH en su contrato inteligente utilizando una fuente de precios de Chainlink:

1pragma solidity ^0.6.7;
2
3import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
4
5contract PriceConsumerV3 {
6
7 AggregatorV3Interface internal priceFeed;
8
9 /**
10 * Network: Kovan
11 * Aggregator: ETH/USD
12 * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
13 */
14 constructor() public {
15 priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
16 }
17
18 /**
19 * Returns the latest price
20 */
21 function getLatestPrice() public view returns (int) {
22 (
23 uint80 roundID,
24 int price,
25 uint startedAt,
26 uint timeStamp,
27 uint80 answeredInRound
28 ) = priceFeed.latestRoundData();
29 return price;
30 }
31}
Mostrar todo

Generación de aleatoriedad verificable

Ciertas aplicaciones de cadena de bloques, como los juegos basados en la cadena de bloques o los esquemas de lotería, requieren un alto nivel de imprevisibilidad y aleatoriedad para funcionar de manera efectiva. No obstante, la ejecución determinista de las cadenas de bloques elimina cualquier aleatoriedad.

El enfoque original era usar funciones criptográficas seudoaleatorias, como blockhash, pero estas podían ser manipuladas por los minerosopens in a new tab resolviendo el algoritmo de proof-of-work. Además, el cambio de Ethereum a proof-of-stake significa que los desarrolladores ya no pueden depender de blockhash para aleatoriedad onchain. El mecanismo RANDAOopens in a new tab de la Beacon Chain ofrece una fuente alternativa de aleatoriedad.

Es posible generar el valor aleatorio fuera de la cadena y enviarlo en la cadena, pero hacerlo impone altos requisitos de confianza a los usuarios. Deben creer que el valor se generó realmente a través de mecanismos impredecibles y no se alteró en el tránsito.

Los oráculos diseñados para la computación fuera de la cadena resuelven este problema generando de manera segura resultados aleatorios fuera de la cadena que transmiten en la cadena, junto con pruebas criptográficas que certifican la imprevisibilidad del proceso. Un ejemplo es Chainlink VRFopens in a new tab (Función Aleatoria Verificable), que es un generador de números aleatorios (RNG) demostrablemente justo e inalterable, útil para construir smart contracts fiables para aplicaciones que dependen de resultados impredecibles.

Obtener resultados de eventos

Con los oráculos, es fácil crear contratos inteligentes que respondan a eventos del mundo real. Los servicios de oráculos lo hacen posible, ya que permiten que los contratos se conecten a API externas a través de componentes fuera de la cadena y utilicen información de esas fuentes de datos. Por ejemplo, la DApp de predicción mencionada anteriormente puede solicitar a un oráculo que devuelva los resultados de las elecciones desde una fuente de confianza fuera de la cadena (por ejemplo, la Associated Press).

El uso de oráculos para recuperar datos basados en resultados del mundo real permite otros nuevos casos de uso; por ejemplo, un producto de seguro descentralizado necesita información precisa sobre el clima, los desastres, etc. para funcionar de manera efectiva.

Automatización de smart contracts

Los contratos inteligentes no se ejecutan automáticamente; más bien, una cuenta de propiedad externa (EOA), u otra cuenta de contrato debe activar las funciones correctas para ejecutar el código del contrato. En la mayoría de los casos, la mayor parte de las funciones del contrato son públicas y pueden ser invocadas por las EOA y otros contratos.

Pero también existen funciones privadas dentro de un contrato que son inaccesibles para otros; pero que son críticas para la funcionalidad general de una dapp. Ejemplos incluyen una función mintERC721Token() que emite periódicamente nuevos NFT para los usuarios, una función para otorgar recompensas en un mercado de predicción, o una función para desbloquear tokens bloqueados en un DEX.

Los desarrolladores tendrán que activar dichas funciones a diferentes intervalos para mantener el funcionamiento de la aplicación. No obstante, esto podría llevar a que se pierdan más horas en tareas mundanas para los desarrolladores, por lo que la automatización de la ejecución de contratos inteligentes es atractiva.

Algunas redes de oráculos descentralizados ofrecen servicios de automatización, que permiten a los nodos oráculo fuera de la cadena activar funciones de contratos inteligentes según los parámetros definidos por el usuario. Por lo general, esto requiere «registrar» el contrato de destino en el servicio de oráculo, proporcionar fondos para pagar al operador del oráculo y especificar las condiciones o los tiempos para activar el contrato.

La Keeper Networkopens in a new tab de Chainlink proporciona opciones para que los smart contracts subcontraten tareas regulares de mantenimiento de forma minimizada en confianza y descentralizada. Lea la documentación oficial de Keeperopens in a new tab para obtener información sobre cómo hacer que su contrato sea compatible con Keeper y utilizar el servicio Upkeep.

Cómo utilizar oráculos blockchain

Hay múltiples aplicaciones de oráculo que puede integrar en su DApp de Ethereum:

Chainlinkopens in a new tab - Las redes de oráculos descentralizados de Chainlink proporcionan entradas, salidas y cálculos resistentes a manipulaciones para respaldar smart contracts avanzados en cualquier blockchain.

RedStone Oraclesopens in a new tab - RedStone es un oráculo modular descentralizado que provee feeds de datos optimizados en consumo de gas. Se especializa en ofrecer fuentes de precios para activos emergentes, como tókenes de participaciones líquidas (LST), tókenes de nuevas participaciones líquidas (LRT) y derivados de participación de Bitcoin._

Chronicleopens in a new tab - Chronicle supera las limitaciones actuales de transferencia de datos onchain mediante el desarrollo de oráculos verdaderamente escalables, rentables, descentralizados y verificables.

Witnetopens in a new tab - Witnet es un oráculo sin permisos, descentralizado y resistente a la censura que ayuda a los smart contracts a reaccionar ante eventos del mundo real con sólidas garantías criptoeconómicas.

UMA Oracleopens in a new tab - El oráculo optimista de UMA permite a los smart contracts recibir rápidamente cualquier tipo de dato para distintas aplicaciones, incluyendo seguros, derivados financieros y mercados de predicción.

Telloropens in a new tab - Tellor es un protocolo de oráculo transparente y sin permisos que permite a su smart contract obtener cualquier dato cuando lo necesite.

Band Protocolopens in a new tab - Band Protocol es una plataforma de oráculos de datos cross-chain que agrega y conecta datos y APIs del mundo real con smart contracts.

Pyth Networkopens in a new tab - La red Pyth es una red de oráculos financieros de primera parte diseñada para publicar datos del mundo real de manera continua onchain en un entorno resistente a manipulaciones, descentralizado y autosostenible.

API3 DAOopens in a new tab - API3 DAO está ofreciendo soluciones de oráculo de primera parte que proporcionan mayor transparencia sobre el origen, seguridad y escalabilidad en una solución descentralizada para smart contracts

Supraopens in a new tab - Un conjunto de herramientas verticalmente integrado de soluciones cross-chain que interconectan todas las blockchains, ya sean públicas (L1s y L2s) o privadas (empresas), proporcionando feeds de precios de oráculo descentralizados que pueden usarse tanto para casos de uso onchain como offchain.

Gas Networkopens in a new tab - Una plataforma de oráculos distribuida que proporciona datos de precios de gas en tiempo real en blockchain. Al llevar datos de los principales proveedores de precios de gas onchain, Gas Network está ayudando a impulsar la interoperabilidad. Gas Network ofrece soporte de datos para más de 35 cadenas, incluida Ethereum Mainnet y muchas L2 destacadas.

Lecturas adicionales

Artículos

Videos

Tutoriales

Proyectos de ejemplo

¿Le ha resultado útil este artículo?