Un oráculo blockchain es una herramienta que utiliza tecnología de una cadena de bloques e interactúa con el mundo real. He ahí porqué tienen tanta utilidad, ya que permiten la creación de un puente de datos entre el mundo real y el criptomundo para crear aplicaciones que puedan sacar todo el partido de la tecnología de esa cadena de bloques.
Los oráculos blockchain
Cuando se opera en una cadena de blockchain, o cadena de bloques, pueden ocurrir diversas situaciones adversas que pongan en riesgo la estabilidad de la blockchain. Una de estas posibles situaciones sería la división existente entre los datos del mundo físico y los que existen en la cadena. Aquí es cuando entran en acción los oráculos blockchain. Un oráculo de blockchain es una herramienta que permite la conexión de la información procedente de la realidad física con la de la blockchain. Los usuarios de la cadena de bloques tienen múltiples formas de hacer que las blockchains sean útiles para su vida cotidiana gracias a los oráculos,.
¿Qué es un oráculo blockchain?
Un oráculo blockchain es un servicio proporcionado por un tercero que hace de puente entre los datos del mundo real y los de la blockchain. La forma de operar es la siguiente: el oráculo blockchain envía datos externos a una cadena de bloques, esta cadena toma los datos y los utiliza para ejecutar los smart contracts de la cadena de bloques.
¿Cómo funciona un oráculo blockchain?
Los oráculos blockchain tienen diversas modalidades. Unos transmiten datos hacia y desde la blockchain y pueden operar tanto con un soporte hardware como en modo software. La mayoría de los oráculos son descentralizados, pero hay tareas que requieren de oráculos centralizados. Los oráculos centralizados funcionan como la variedad blockchain de una API. Pero en vez de ser parte de la blockchain o de la fuente de datos, estos oráculos son una capa que opera junto a la cadena blockchain. Esta capa, consulta una fuente de datos exterior para conseguir la información necesaria. Una vez esta es autentificada, el oráculo blockchain envía la verificación a la blockchain. Cuando la información llega al sistema blockchain, se puede utilizar de diversas formas. Generalmente, se ordena a la cadena blockchain que de validez automáticamente a un smart contract después de que los datos necesarios estén presentes. Los oráculos blockchain también pueden ser utilizados para remitir información de la cadena de bloques al mundo real o para otro tipo de operaciones y actividades blockchain.
extiende hasta el mundo real.
¿Cuál es la importancia de los oráculos blockchain?
En las diversas blockchains, los oráculos son parte esencial en la mayoría de las aplicaciones. Los oráculos son imprescindibles ya que operan como puente para el traspaso de información de un sitio a otro. Sin los oráculos de blockchain, las cadenas de bloques serían sistemas cerrados que no podrían cambiar ni reaccionar ante eventos externos. Si echamos una mirada a las múltiples aplicaciones de los oráculos, es fácil comprender por qué son esenciales para el funcionamiento de cualquier blockchain.
¿Cuál es la funcionalidad de un oráculo blockchain?
La principal función de un oráculo blockchain es servir como método para nutrir de datos externos a una blockchain o un smart contract. Esta información puede producir una acción concreta dentro de la misma cadena de bloques según una determinada programación. Pongamos, por ejemplo, que una persona vende su vehículo a cambio de cierta cantidad en criptomonedas. Se puede configurar un oráculo para transferir datos de la cadena de bloques hacia el mundo real y, posteriormente, emplearlo para transferir la propiedad del coche cuando se reciban las criptomonedas.
Los oráculos blockchain también pueden ser utilizados para hacer apuestas, por ejemplo apostar $50 usd si el Real Madrid gana contra la Juventus. El oráculo puede monitorear resultados de encuentros y eventos deportivos y transferir los fondos en cuanto se decida quien gana el partido. Además, el oráculo se encarga de recopilar y verificar dicha la información desde varias fuentes y ,así, crea un consenso y puede dar un resultado preciso e imposible de manipular.
Es más, los oráculos blockchain son útiles para la gestión de derivados fiancieros, seguros y otras formas de gestión de riesgos. Hasta podría darse el caso de un agricultor que utilizara un oráculo blockchain para administrar derivados agrícolas que le supongan una renta en caso de que pierda su cosecha. El oráculo también podría utilizarse para hacer un seguimiento del clima y asegurar que el agricultor reciba los fondos de su seguro si la producción no alcanza una determinada cantidad de lluvia a tiempo.
Así pues, un oráculo es una fuente de información que envía datos que informan a la red de sucesos que ocurrieron en el mundo exterior. Lo cual permite que el smart contract pueda ser activado para liberar la cantidad de fondos criptográficos acordada tras el cumplimineto de las condiciones predeterminadas en el smart contract. Gracias a esto, los smart contract se convierten en algo muy útil para el mundo real.
¿Qué tipos de oráculos blockchain hay?
Principalmente podemos hallar 5 tipos de oráculos para cadenas de bloques que son los siguientes:
Oráculo por software
Se trata de un oráculo que maneja información en línea. También son conocidos como oráculos por software. Estos oráculos pueden extraer y ordenar datos en línea, como horarios de vuelos, información climatológica (temperatura), el precio de determinado producto, entre muchos otros tipos de datos. Todos los datos se envian a un smart contract para el cual fueron programados, con el fin de que dicho contrato inteligente realice aquellas acciones para las que fue programado.
Oráculos blockchain por hardware
Los oráculos blockchain por hardware, a diferencia de los que funcionan por software, rastrean datos del mundo real. Esto se debe a que ciertos smart contracts requieren de cierta información del mundo físico. Pongamos, por ejemplo, al trayeccto de un autobús, o un barco, o rastrear la ruta de un automóvil cuando llega a un lugar determinado o cuando traspasa un límite o una barrera. Los dispositivos físicos o hardware brindan al usuario la capacidad de monitorear todos los datos de la cadena blockchain.
Estos oráculos físicos suelen incluir sensores para el IoT (Internet of Things), RFID o lectores de códigos de barras. Los datos que captan se envían a un sistema de suministro de informaación basado en la blockchain de turno, lo cual brinda a los usuarios una información muy completa.
Oráculos entrantes
Los oráculos entrantes proporcionan información desde el mundo exterior hacia la cadena blockchain o el smart contract. Se trata deoráculos muy utilizados por empresas o compañías que desean automatizar distintas acciones dependiendo de la introducción de datos externos.
Oráculos salientes
Por otro lado estarían los oráculos blockchain salientes. Se trata de oráculos que facilitan a la blockchain el envío datos al mundo físico, como en las tecnologías de los hogares inteligentes. Este tipo de oráculos es muy común, ya que permiten, por ejemplo, abrir una puerta de dicho hogar una vez se ha verificado que la entrada ha sido permitida por una clave privada y una firma criptográfica autorizadas.
Oráculos de consenso
Como ya hemos expuesto en el anterior ejemplo, hay oráculos blockchain que están basados en un consenso para asegurar datos fiables y que estos no puedan ser manipulados. Dichos oráculos son ideales para controlar mercados financieros, ya que esots oráculos recopilan datos desde diversos lugares para aportar una información verz, ya que si se empleara una sola fuente de información sería poco fiable y muy insegura.
Los oráculos en la blockchain de Bitcoin
Aunque, actualmente, la red de Ethereum es la cadena de bloques número 1 para el los smart contracts, Bitcoin también tiene esa capacidad para el uso oráculos para su cadena de blocques. Un buen ejemplo sería el proyecto que ha desarrollado el Instituto Tecnológico de Massachussets (MIT), en el cual se utilizan oráculos y smart contracts en la Lightning Network (LN) de Bitcoin. Este pryecto es conocido como lit, y es factible revisar su código fuente desde GitHub.
El objetivo de este proyecto es programar transacciones a partir de la ejecución de un smart contract. Lo que permitiría proporcionar una gran escalabilidad a la blockchain de Bitcoin y descubrir todo el potencial que poseen los contratos inteligentes.
El proyecto está dirigido por Tadge Dryja del MIT y utiliza un oráculo simple, a través del cual se podrán añadir otras funcionalidades de los contratos inteligentes a las transacciones realizadas en la blockchain de BTC, sin que esto represente riesgo alguno para la privacidad y la seguridad de dicha red. Así, se podrán transmitir datos para la ejecución de un smart contract según la información recibida.
Características principales de un oráculo blockchain
- Privacidad. Un oráculo no puede saber si se ha iniciado un smart contract o si la información ha sido incluida en dicha blockchain, por lo cual se emplea un protocolo especial que mezcla todos los datos suministrados por el oráculo antes de introducirla en dicha blockchain. Así, se mantiene en el anonimato la identidad de los usuarios.
- Conectividad. Un oráculo blockchain permite que los contratos se puedan conectar con proveedores de datos en el exterior de la blockchain, como API webs, backends empresariales, IoT, sistemas de pago y otras blockchain.
- Servicio centralizado. El oráculo de la blockchain obtiene la información de servicios exteriores centralizados de absoluta confianza, lo que requiere que se pueda confiar en que dicho servicio está enviando datos correctos al cien por cien. Y, aunque se trate es una problemática que no se ha conseguido solucionar por completo, si se ha logrado implementar soluciones para paliar ampliamente esta circunstancia,
- Monetización. Un oráculo de cadena de bloques no está monetizados de forma razonable, lo cual implica que, para llegar a ver una adopción masiva de estas herramientas, será necesaria la existencia de algún incentivo o recompensa para los operadores del oráculo.
¿Cuáles son los riesgos de los oráculos descentralizados?
Los oráculos han sido concebidos como una herramienta que funciona bajo un control centralizado, es un modelo que dista de ser el modelo descentralizado, que es por el cual aboga la tecnología blockchain. Por tanto, al utilizar este tipo de servicios, debes confiar completamente en los datos proporcionados por una entidad que podría estar manipulando dicha información.
Este es el mayor riesgo que tienen los oráculos blockchain. Para evitar este riesgo, se crearon los oráculos descentralizados. Un oráculo blockchain descentralizado obtiene los datos de diversos oráculos y su programación asegura la comunicación al contrato inteligente de lo que diga la mayoría de los oráculos contactados. Aquí es súmamente importante la descentralización del control sobre todos los oráculos utilizados.
En este sentido, hay dos proyectos muy importantes: Provable (antes Oraclize) y ChainLink. Ambos oráculos se ejecutan sobre la cadena de Ethereum. Ambos sistemas utilizan el poder de los Smart Contracts de Ethereum para crear un oráculo blockchain descentralizado que se nutre de diversas fuentes de datos para dar, finalmente, un resultado de acuerdo a dicha información. Dadas las características de blockchain, la programación de los Contratos Inteligentes puede ser revisada libremente y no puede ser alterada sin que haya un consenso entre todas las partes del sistema, lo que garantiza que la información siempre sea válida y esté libre de cualquier manipulación.
¿Son seguros los oráculos?
Un oráculo blockchain será tan seguro como lo sean las fuentes de información empleadas por dicho oráculo. Si una aplicación descentralizada emplea Uniswap como oráculo para el feed del precio para el par ETH/DAI, cualquier hacker podría modificar ese precio en Uniswap y así manipular los datos del precio actual de la dapp. Para cotrarrestar esto es empleado un sistema de feed como el que utiliza MakerDAO. Este feed de datos coteja los precios desde varios feeds de datos externos, en vez de confiar en un solo suministrador de datos, los compara y utilizada los que coinciden con la mayoría de sus fuentes de datos.
¿Tienen algún problema los oráculos blockchain?
Ya hemos comentado que las transacciones de la red Ethereum no tienen la capacidad de acceder a información externa a la cadena de bloques de forma directa. Además, confiar en una sola fuente de datos de confianza no es seguro y eso invalidaría la tan buscada descentralización de un Smart Contract. Ese es el principal problema de los oráculos blockchain.
Para evitar este problema, basta con utilizar un oráculo blockchain descentralizado que obtenga los datos de diferentes fuentes externas; si una de esas fuentes de información sufre un hackeo o tiene un fallo, el Smart Contract seguiría funcionando según lo previsto.
Casos de uso de los oráculos blockchain
Tanto la tecnología blockchain como los smart contract han introducido nuevas tecnologías que han conllevado cambios radicales, lo que ha conducido a que muchas empresas estén adaptando sus infraestructuras para poder cumplir con las rigurosas demandas de la verificación de la información que facilitan para poder tener la confianza debida y ahí es donde los oráculos forman parte esencial del proceso. Esto continuará creciendo a medida que las compañías vayan adoptando cada vez más la tecnología blockchain para sus operaciones.
Uno de los casos de uso de un oráculo más conocidos es el de Augur. Se trata de una plataforma de mercado de predicción descentralizada que ha sido creada en la blockchain de Ethereum. Augur fue desarrollada por Forecast Foundation, que se fundó en 2014 por Jack Peterson y Joey Krug. Augur es un oráculo impulsado por el token RE.
Pero, sin duda, el más conocido es el de ChainLink (LINK). Como ya hemos mencionado, Chainlink ofrece un servicio de oráculo blockchain descentralizado que tiene el objetivo de conectar los smart contract con los datos provenientes del mundo físico y, al mismo tiempo, ofrece recompensas e incentivos a todos los que participan en su red.
Las conexiones de Chainlink van desde pagos bancarios o minoristas (como Visa y Paypal), a datos de mercado como NYSE o Bloomberg. Además, permite la conexión entre sistemas backend, como SalesForce y SAP, lo que permitie que la blockchain se integre con redes de pagos locales y con ventas fuera de dicha red.
¿Por qué es necesario un oráculo?
En una blockchain, como la de Ethereum, es imperativo que cada nodo de la cadena de bloques pueda replicar cada una de las transacciones efectuadas y obtener el mismo resultado de forma garantizada. Las API insertan información que puede variar. Si un usuario le envía una cantidad X de Ethereum a otro, según el valor de $USD en el momento acordado, utilizando una API, la consulta daría diferentes resultados de un día para otro. Y todo eso sin contar con que la API podría hackearse o quedarse obsoleta con el tiempo. Si ocurriera alguna de estas cosas, los nodos de la cadena de bloques no lograrían ponerse de acuerdo sobre el estado actual del Ether, lo que acarrearía una ruptura del consenso.
En una cadena de bloques, los oráculos resuelven estos problemas publicando todos estos datos en la blockchain. De esta forma, si un nodo replica una transacción utilizará la misma información inmutable que ya se publicó en la cadena de bloques anteriormente. Para llevarlo a cabo, el oráculo blockchain utilizará un smart contract y ciertos componentes externos a la blockchain que realizarán consultas a diversas API para, posteriormente, enviar los datos de las transacciones para actualizarlos en los Smart Contracts.
Arquitectura de un oráculo blockchain
Solo se trata de un ejemplo de arquitectura simple para un oráculo blockchain, pero hay muchas maneras para activar un cálculo externo a la blockchain.
- Primero emite un registro con su evento de contrato inteligente.
- Luego un servicio externo a la cadena se suscribe a estos registros específicos (generalmente usando algo como el comando JSON-RPC
eth_subscribe
). - El servicio exterior de cadena efectúa las tareas definidas en el registro del Smart Contract.
- Para finalizar, este servicio externo de cadena responde ofreciendo los datos solicitados en una operación secundaria al Smart Contract.
Este ejemplo muestra la forma de obtener datos en modo de 1 a 1. Sin embargo, para conseguir una mejor seguridad, es muy posible que desee descentralizar el modo en que se recopila la información fuera de la cadena de bloques.
Podría haber un segundo paso que sería tener una red formada por estos nodos haciendo llamadas a diferentes API y fuentes de datos y agregando luego dichos datos en la cadena de bloques.
Off-Chain Reporting de Chainlink (Chainlink OCR) ha mejorado sustancialmente este método de trabajo haciendo que las diferentes fuentes de la cadena de oráculos externos a la blockchain se comuniquen entre sí. firmen criptográficamente sus respuestas, las agreguen fuera de la cadena de bloques y emitan solo una transacción con el resultado en la cadena. De esa forma, consume menos gas, pero sigue obteniendo la garantía de los datos descentralizados, ya que cada nodo firma su parte de la transacción, con lo que el nodo que envía la transacción no tiene la capacidad de modificarla. Si un nodo no realiza transacciones y el siguiente nodo sí las hace, la política de escalamiento entrará en acción.
Uso de los oráculos blockchain
Haciendo uso de servicios de oráculo como el de Chainlink se pueden referenciar datos descentralizados en cadena extraídos del mundo real y agregados a la blockchain. Sería un patrimonio público para datos descentralizados. También es posible crear sus propias redes modulares de oráculos para condeguir cualquier tipo de datos personalizados que se precisen. También se puede hacer un cómputo fuera externo a la blockchain y también remitir datos al mundo real. El oráculo de Chainlink tiene una gran infraestructura para:
- Obtener feeds de precios de criptomonedas en su contrato
- Generar números aleatorios verificables (útiles para gaming)
- Hacer llamadas a API externas: un caso de uso novedoso de esto es revisar reservas de wBTC
Esto es tan solo un ejemplo de cómo se puede obtener el precio más actualizado de Ether en un Smart Contract utilizando un feed de precios de Chainlink:
Feeds de datos de Chainlink
pragma solidity ^0.6.7; import «@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol»; contract PriceConsumerV3 { AggregatorV3Interface internal priceFeed; /** * Network: Kovan * Aggregator: ETH/USD * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331 */ constructor() public { priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); } /** * Returns the latest price */ function getLatestPrice() public view returns (int) { ( uint80 roundID, int price, uint startedAt, uint timeStamp, uint80 answeredInRound ) = priceFeed.latestRoundData(); return price; } }Puede probar esto en remix con este enlace
Chainlink FAV
Chainlink FAV (proveniente del acrónimo inglés de función aleatoria verificable) es una fuente justa y verificable de aleatoriedad que ha sido diseñada para ser utilizada por contratos inteligentes. Los desarrolladores de Smart Contracts pueden emplear Chainlink VRF como generador de números aleatorios (GNA), esto lo haría resistente a manipulaciones, para así crear Smart Contracts de confianza para cualquier aplicación descentralizada (dApp) que se base en resultados impredecibles, como:
- NFT y juegos blockchain
- Asignación aleatoria de tareas y recursos (como la asignación aleatoria de casos a jueces)
- Elección de una muestra representativa para mecanismos de consenso
Estos números aleatorios son muy difíciles de conseguir, porque las blockchains son deterministas por su naturaleza.
Trabajar con un oráculo de Chainlink fuera de los feeds de datos se ciñe al ciclo de solicitud y recepción de trabajar con Chainlink. Para ello se usa el token LINK para enviar el gas del oráculo a los proveedores de datos para que muestren las respuestas. El token LINK fue específicamente diseñado para ser utilizado con oráculos blockchain y está basado en la actualización del token ERC-677, que ofrece total compatibilidad con las anteriores versiones de ERC-20. Si se implementa el siguiente código en la red de prueba de Kovan, se recuperará un número aleatorio comprobado de forma criptográfica. Para hacer esta solicitud, hay que financiar el contrato inteligente con algún token LINK de la red de prueba, que se puede obtener del Faucet de LINK de Kovan.
pragma solidity 0.6.6; import «@chainlink/contracts/src/v0.6/VRFConsumerBase.sol»; contract RandomNumberConsumer is VRFConsumerBase { bytes32 internal keyHash; uint256 internal fee; uint256 public randomResult; /** * Constructor inherits VRFConsumerBase * * Network: Kovan * Chainlink VRF Coordinator address: 0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9 * LINK token address: 0xa36085F69e2889c224210F603D836748e7dC0088 * Key Hash: 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4 */ constructor() VRFConsumerBase( 0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9, // VRF Coordinator 0xa36085F69e2889c224210F603D836748e7dC0088 // LINK Token ) public { keyHash = 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4; fee = 0.1 * 10 ** 18; // 0.1 LINK (varies by network) } /** * Requests randomness from a user-provided seed */ function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) { require(LINK.balanceOf(address(this)) >= fee, «Not enough LINK – fill contract with faucet»); return requestRandomness(keyHash, fee, userProvidedSeed); } /** * Callback function used by VRF Coordinator */ function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { randomResult = randomness; } }Chainlink Keepers
Un Smart Contract no puede activar o iniciar sus propias funciones de forma arbitraria o en un momento aleatorio. Los cambios de estado de un contrato inteligente solo pueden tener lugar cuando otra cuenta inicia una transacción (ya sea un usuario, un oráculo o un contrato). La Red Chainlink Keepers, a fin de externalizar tareas de mantenimiento regular de manera minimalizada y descentralizada, proporciona diversas opciones para los Smart Contracts.
Para ustilizar Ckainlink Keepers, un Smart Contract debe implementar KeeperCompatibleInterface, el cual tiene dos funciones:
checkUpkeep
: verificar si el contrato inteligente requiere algún trabajo.performUpkeep
: realizar dicho trabajo en el contrato inteligente, si antes se lo indica checkUpkeep.
El siguiente es un ejemplo de contrato inteligente de contador simple. La variable counter
aumenta en uno con cada llamada a performUpkeep
. Se aconseja revisar el siguiente código usando Remix
Tras la implementación de un contrato inteligente compatible con Keeper, se debe registrar el Smart Contract para Upkeep y depositar los fondos necesarios y el gas con LINK, para así notificar a la Red de Keepers sobre este contrato, de forma que el trabajo se realice de modo contínuo.
Proyectos de Keepers
¿Qué es un llamada a la API de Chainlink?
Una llamadas a la API de Chainlink es la forma más sencilla de conseguir datos del mundo exterior a la blockchain de la forma tradicional en que funciona la Web: las llamadas a una API. Una sola instancia de esto, y teniendo tan solo un oráculo, haría que el proceso fuese centralizado por naturaleza. Para conseguir la descentralización verdadera, una plataforma blockchain que emplee Smart Contracts necesitaría emplear múltiples nodos encontrados en un mercado externo de datos.
Implemente el siguiente código en remix en la red kovan para hacer pruebas
La llamada también sigue el ciclo de solicitud y recepción de los oráculos y, por lo tanto, para funcionar también necesita que el contrato reciba fondos de Kovan LINK (el gas para los oráculos).
pragma solidity >=0.4.21 <0.6.0; contract Oracle { Request[] requests; //list of requests made to the contract uint currentId = 0; //increasing request id uint minQuorum = 2; //minimum number of responses to receive before declaring final result uint totalOracleCount = 3; // Hardcoded oracle count // defines a general api request struct Request { uint id; //request id string urlToQuery; //API url string attributeToFetch; //json attribute (key) to retrieve in the response string agreedValue; //value from key mapping(uint => string) anwers; //answers provided by the oracles mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn’t voted, 2=oracle has voted) } //event that triggers oracle outside of the blockchain event NewRequest ( uint id, string urlToQuery, string attributeToFetch ); //triggered when there’s a consensus on the final result event UpdatedRequest ( uint id, string urlToQuery, string attributeToFetch, string agreedValue ); function createRequest ( string memory _urlToQuery, string memory _attributeToFetch ) public { uint lenght = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, «»)); Request storage r = requests[lenght-1]; // Hardcoded oracles address r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; // launch an event to be detected by oracle outside of blockchain emit NewRequest ( currentId, _urlToQuery, _attributeToFetch ); // increase request id currentId++; } //called by the oracle to record its answer function updateRequest ( uint _id, string memory _valueRetrieved ) public { Request storage currRequest = requests[_id]; //check if oracle is in the list of trusted oracles //and if the oracle hasn’t voted yet if(currRequest.quorum[address(msg.sender)] == 1){ //marking that this address has voted currRequest.quorum[msg.sender] = 2; //iterate through «array» of answers until a position if free and save the retrieved value uint tmpI = 0; bool found = false; while(!found) { //find first empty slot if(bytes(currRequest.anwers[tmpI]).length == 0){ found = true; currRequest.anwers[tmpI] = _valueRetrieved; } tmpI++; } uint currentQuorum = 0; //iterate through oracle list and check if enough oracles(minimum quorum) //have voted the same answer has the current one for(uint i = 0; i < totalOracleCount; i++){ bytes memory a = bytes(currRequest.anwers[i]); bytes memory b = bytes(_valueRetrieved); if(keccak256(a) == keccak256(b)){ currentQuorum++; if(currentQuorum >= minQuorum){ currRequest.agreedValue = _valueRetrieved; emit UpdatedRequest ( currRequest.id, currRequest.urlToQuery, currRequest.attributeToFetch, currRequest.agreedValue ); } } } } } }Puede obtener más información acerca de las aplicaciones de Chainlink leyendo el blog para desarrolladores de Chainlink.
SERVICIOS DE ORÁCULOS
Creación de un contrato inteligente de oráculo
Este es un ejemplo de un contrato inteligente de oráculo diseñado por Pedro Costa. Puede encontrar anotaciones adicionales en su artículo: Implementación de un oráculo de cadena de bloques en Ethereum.
pragma solidity ^0.6.0; 2 3import «@chainlink/contracts/src/v0.6/ChainlinkClient.sol»; 4 5contract APIConsumer is ChainlinkClient { 6 7 uint256 public volume; 8 9 address private oracle; 10 bytes32 private jobId; 11 uint256 private fee; 12 13 /** 14 * Network: Kovan 15 * Oracle: 0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e 16 * Job ID: 29fa9aa13bf1468788b7cc4a500a45b8 17 * Fee: 0.1 LINK 18 */ 19 constructor() public { 20 setPublicChainlinkToken(); 21 oracle = 0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e; 22 jobId = «29fa9aa13bf1468788b7cc4a500a45b8»; 23 fee = 0.1 * 10 ** 18; // 0.1 LINK 24 } 25 26 /** 27 * Create a Chainlink request to retrieve API response, find the target 28 * data, then multiply by 1000000000000000000 (to remove decimal places from data). 29 */ 30 function requestVolumeData() public returns (bytes32 requestId) 31 { 32 Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector); 33 34 // Set the URL to perform the GET request on 35 request.add(«get», «https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD»); 36 37 // Set the path to find the desired data in the API response, where the response format is: 38 // {«RAW»: 39 // {«ETH»: 40 // {«USD»: 41 // { 42 // «VOLUME24HOUR»: xxx.xxx, 43 // } 44 // } 45 // } 46 // } 47 request.add(«path», «RAW.ETH.USD.VOLUME24HOUR»); 48 49 // Multiply the result by 1000000000000000000 to remove decimals 50 int timesAmount = 10**18; 51 request.addInt(«times», timesAmount); 52 53 // Sends the request 54 return sendChainlinkRequestTo(oracle, request, fee); 55 } 56 57 /** 58 * Receive the response in the form of uint256 59 */ 60 function fulfill(bytes32 _requestId, uint256 _volume) public recordChainlinkFulfillment(_requestId) 61 { 62 volume = _volume; 63 } 64} 65Nos encantaría tener más documentación sobre la creación de un contrato inteligente de oráculo. Si puede colaborar, cree una PR.
PARA PROFUNDIZAR SOBRE EL TEMA
Artículos
- ¿Qué es un oráculo de cadena de bloques? – Chainlink
- Oráculos – EthHub
- ¿Qué es un oráculo de cadena de bloques? – Patrick Collins
- Oráculos descentralizados: descripción completa – Julien Thevenard
- Implementación de un oráculo de cadena de bloques en Ethereum – Pedro Costa
- ¿Por qué los contratos inteligentes no pueden hacer llamadas a API? – StackExchange
- ¿Por qué necesitamos oráculos descentralizados – Bankless
- Así que quiere usar un oráculo de precios – samczsun
Videos
- Oráculos y la expansión de la utilidad de la cadena de bloques –Real Vision Finance
Tutoriales