Oráculos en Solidity: requests por fuera de la Blockchain con Oraclize.

Fuentes de datos

  • URL permite el acceso a cualquier página web o API
  • WolframAlpha permite el acceso al motor computacional de WolframAlpha
  • IPFS provee acceso a cualquier contenido guardado en InterPlanetary File System
  • Random proporciona bytes aleatorios provenientes de una aplicación segura.
  • Computation proporciona el resultado de un cálculo arbitrario.

Parseadores de respuesta

  • JSON Parsing
  • XML Parser
  • HTML Parser
  • Binary Helper

Integración con Ethereum y ejemplo práctico.

  • En un caso cotidiano, una transacción que ejecuta un método de un contrato es emitida por un usuario. El método contiene una instrucción a Oraclize, quien está constantemente observando la blockchain para actuar en caso de una solicitud de este estilo.
  • En un segundo paso, Oraclize calculará un resultado, lo firmará y llevará a cabo una transacción acompañada del resultado. Dicha transacción llamará a la función __callback que debemos implementar en nuestro contrato como punto de comunicación y recepción de datos.

Ejemplo práctico

pragma solidity ^0.4.0;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";
contract BitcoinPrice is usingOraclize {

uint public BitcoinPriceUSD;
event newOraclizeQuery(string description);
event newBitcoinPrice(string price);
function BitcoinPrice() {
update();
}
function __callback(bytes32 myid, string result) {
if (msg.sender != oraclize_cbAddress()) throw;
newBitcoinPrice(result);
BitcoinPriceUSD = parseInt(result, 2);
// hacer algo con el precio del Bitcoin
}

function update() payable {
newOraclizeQuery("Oraclize query was sent, standing by for the answer..");
oraclize_query("URL", "json(https://api.coinmarketcap.com/v1/ticker/bitcoin/).0.price_usd");
}

}
  • BitcoinPrice hereda de Oraclize
contract BitcoinPrice is usingOracliz
  • La función __callback recibe la respuesta y ejecuta nuestra lógica
function __callback(bytes32 myid, string result)
  • Usamos JSON Parsing para recuperar el atributo price_usd en el índice cero [0] del arreglo
json(https://api.coinmarketcap.com/v1/ticker/bitcoin/).0.price_usd)

Consideración importante

Conclusión

--

--

--

dev. #ethereum. few. software engineer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Federico Elgarte

Federico Elgarte

dev. #ethereum. few. software engineer

More from Medium

What is “stack too deep” in Solidity?

Optimizing your smart contract code can be valuable in decreasing gas fees, making your smart…

Smart contracts development(Overview with truffle)

Solidity Modifier