Cómo elegir el tipo de datos adecuado en el Mercado Honeycomb

Este artículo es una traducción de https://medium.com/clc-group/how-to-choose-the-data-type-on-honeycomb-marketplace-f77552099a1f escrito por Burak Benligiray y traducido por Chainlink en español.

En en uno de nuestros últimos artículos te ofrecimos una visión general del Mercado Honeycomb. En él mencionábamos que tenías que seleccionar el tipo de datos del trabajo que quieras usar. En este artículo, vamos a ahondar en ese tema.

¿Qué es el tipo de datos y por qué debería importarme?

Solidity es un lenguaje fuertemente tipado y estático, lo que significa que el compilador necesita conocer los tipos de todas las variables durante la compilación. Esto incluye las respuestas que nos devuelva el oráculo. Por ejemplo, podríamos decir:

int256 btcPriceChange;btcPriceChange = getBtcPriceChangeFromOracle();

Ten en cuenta que declaramos que btcPriceChangees del tipo int256 un entero con signo representado con 256 bits), luego escribimos el valor devuelto por getBtcPriceChangeFromOracle() en él. Lo cual implica que el oráculo debería saber que su respuesta va a ser tratada como un int256, y por tanto ha de darle un formato acorde.

Actualmente Chainlink es compatible con 4 tipos de datos de Solidity:

  • int256: Un entero con signo representado con 256 bits
  • uint256: Un entero sin signo representado con 256 bits
  • bool: Un valor booleano (es decir: verdadero / falso)
  • bytes32: Un byte-array de tamaño 32 (normalmente se utiliza para almacenar hasta 32 caracteres ASCII)

Como desarrollador de contratos inteligentes, debes indicarle al oráculo el formato de los datos con el que debe procesar la respuesta. En Honeycomb, resolvemos este problema creando un trabajo para cada tipo de datos. Al elegir un tipo de datos diferente en el menú desplegable, se muestran las respectivas listas de trabajos.

¿Cuándo se usa un tipo de dato u otro?

  • int256: Si la respuesta es un número que puede ser tanto positivo como negativo (por ejemplo, temperatura), utiliza un número entero con signo.
  • uint256: Si la respuesta es un número que nunca va a ser negativo (por ejemplo, tipo de cambio), utiliza un número entero sin signo.
  • bool: Si la respuesta es un valor booleano (verdadero / falso), usa el tipo booleano.
  • bytes32: Si la respuesta es una cadena (un trozo de texto), usa una byte-array de tamaño fijo.

Nota: En un principio, Solidity solo es compatible con números enteros. Si vas a trabajar con números no enteros, tendrás que hacer que el oráculo los convierta por ti previamente. Esta idea la trataremos en otro artículo. Por ahora, consideremos únicamente si el número puede ser negativo o no.

Ejemplo

Llamamos a la ruta /convert de la API de Fixer con los siguientes parámetros (lo que significa que queremos convertir 10 dólares a euros):

{
“from”: “USD”,
“to”: “EUR”,
“amount”: 10
}

La API respondió con:

{
“date”:”2019–11–16",
“info”: {
“rate”: 0.904871
“timestamp”: 1573927446
},
“query”: {
“from”: “USD”,
“to”: “EUR”,
“amount”: 10
},
“result”: 9.04871,
“success”: true
}

(Hemos usado el botón Test en el Mercado Honeycomb para hacer eso. Vamos a dedicarle un artículo exclusivamente para verlo con más profundidad).

Es muy probable que nos interese sea el campo result, que es 9.04871. Este valor se obtiene multiplicando el tipo de cambio (0,904871) por el importe (10). Puesto que ambos números siempre serán positivos, nuestra respuesta también lo será. Por lo tanto, deberíamos usar la lista de trabajos que devuelve un uint256. Pero, ¿habría algún problema si hubiésemos usado un int256? Probablemente no, pero usar el tipo de datos correcto para cada trabajo es considerado una buena práctica. ¿Qué pasaría si usásemos el tipo bytes32? Habríamos obtenido nuestra respuesta como caracteres ASCII dentro de un byte-array (así que el primer elemento habría sido 9, el segundo habría sido ., etc.).

¿Y si quisiéramos obtener el valor de date? Puesto que no es ni un número ni un valor booleano, deberíamos usar bytes32. ¿Y con info.timestamp? Ese valor siempre va a ser un entero sin signo, así que puedes usar uint256sin problema. El campo success tiene un valor booleano dentro, así que en ese caso tendrías que usar el tipo bool. Seguro que ya vas captando la idea.

¡Ahora ya sabes que hay 4 tipos de datos que los oráculos de Chainlink pueden devolver (por ahora), cuándo usar cada uno y cómo encontrar la lista de trabajos correspondiente en el Mercado Honeycomb!

--

--

Comunidad de Chainlink en español
Comunidad de Chainlink en español

Written by Comunidad de Chainlink en español

Unofficial Chainlink Medium in Spanish. This account is not managed by the official team. Lowering the language barrier to entry to becoming part of Chainlink.

No responses yet