El ‘Gas’ en Ethereum

Blockchain Projects
2. September 2019. by Ken Smith
501
Gas Ethereum

Si conocemos ligeramente el mundo de Ethereum es muy posible que haya llegado a nuestros oídos la palabra ‘Gas’. Si por el contrario todo esto es una novedad, lo más probable es que para ti el gas sea lo que lleva la Coca-cola o la Fanta (y no te falta razón).

No te preocupes porque aquí te explicaremos qué es y cuál es su función.

Para empezar comentaremos que la platafoma Ethereum funciona a través de la llamada ‘Ethereum Virtual Machine’ (EVM). Esto sería como un gran ordenador en el que se ejecutan todas las operaciones de Ethereum.

para que se utiliza el gasLe llamamos ‘gran ordenador’ pero en realidad son multitud de ordenadores conectados entre sí a través de Internet.

Esta máquina virtual tiene como función la de ejecutar unos programas llamados ‘contratos inteligentes’ y está distribuida en cada ordenador que forma la red Ethereum -llamados nodos-.

Estos nodos ejecutan estos contratos inteligentes en la EVM, pero no lo hacen de forma gratuita: se requiere de un esfuerzo por parte de estos ordenadores, ya que a su vez necesitan un consumo eléctrico y un determinado tiempo para realizar ese trabajo.

Para compensar a los mineros (nodos) por este gasto temporal, computacional y eléctrico se creó el concepto del Gas. Así que…

¿QUÉ ES EL GAS EN ETHEREUM?

El Gas es el coste que tiene el realizar una operación o un conjunto de operaciones en la red Ethereum. Estas operaciones pueden ser varias: desde realizar una transacción hasta ejecutar un contrato inteligente o crear una aplicación descentralizada.

En otras palabras más simples, el Gas es la unidad para medir el trabajo realizado en Ethereum.

Al igual que en el mundo físico, en Ethereum también hay trabajos que cuestan más que otros: si la operación que queremos realizar requiere un mayor uso de recursos por parte de los nodos que forman la plataforma, esto hará que el Gas aumente también y viceversa.

Por ejemplo, si ejecutamos un contrato inteligente con diez instrucciones diferentes, éste tendrá un coste computacional -en Gas- mayor que un contrato inteligente con una sola instrucción.

También podemos decir que, si una instrucción es más compleja de realizar que otra dentro de un contrato inteligente, esa más compleja requerirá un numero de Gas mayor.

Como ayuda para que nos acordemos de lo que es el Gas diremos que “GAS” se refiere al “GASto” de tipo computacional dentro de Ethereum.

¿CUÁL ES LA FUNCIÓN DEL GAS EN ETHEREUM?

El Gas no tiene una sola utilidad dentro de la plataforma. Eso es también lo que le hace absolutamente perfecto para la estabilidad del sistema.

A continuación pasaremos a enumerar sus funciones y explicar sus utilidades dentro de Ethereum:

Asigna un coste a la ejecución de tareas

Se podría crear una similitud entre el Gas y el uso de los Kilowatios para medir el consumo doméstico de electricidad. En nuestras casas tenemos multitud de aparatos que consumen cierta cantidad de electricidad cada vez que son usados: el ordenador, la televisión, el microondas, etc.

En Ethereum, realizar tareas también tiene un coste. Dependiendo de la dificultad de la tarea o de la rapidez a la que queramos que se procese esa tarea, el coste computacional de esa operación será mayor o menor en consecuencia y el número de Gas aumentará o disminuirá en proporción.

Asegura el sistema

El sistema Ethereum es un sistema seguro y esto es posible en gran medida gracias al Gas.

Al exigir que se pague una comisión por cada operación realizada, la plataforma se asegura de no procesar transacciones inservibles en la red. Esto ayuda a que la cadena de bloques sea más ligera, ya que no añadirá montones de Megabytes de información inútil a la blockchain.

Además, con el Gas, el sistema se protege también contra el ‘spam’ y el uso infinito de los bucles: instrucciones para realizar tareas repetitivas por código.

Por ejemplo, de no existir el Gas, nada evitaría que una tarea se repitiese infinitas veces colapsando el sistema y haciéndolo inservible.

Recompensa a los mineros

Cuando realizamos una transacción o ejecutamos un smart contract, “pagamos” una cantidad determinada de Gas.

Este Gas sirve para “pagar” a los mineros por los recursos que han utilizado (hardware, electricidad y tiempo) y además añadir una recompensa por su trabajo realizado. Por lo tanto, podríamos decir que el Gas también ayuda a mantener el equilibrio de la plataforma.

Hablamos de “pagar” Gas -entre comillas- porque es lo que cuestan las operaciones. En otras palabras, se “paga” por el gasto que le cuesta a Ethereum procesar las transacciones.

Sin embargo puede llevarnos a pensar en la siguiente pregunta:

¿ES EL GAS UNA NUEVA MONEDA DIGITAL?

Puede llevar a confusión, pero la respuesta es clara: no, el Gas no es una nueva moneda digital, ni sirve como unidad de cambio.

moneda digital etherAunque el Gas es la unidad para medir el gasto computacional de la red Ethereum, no hay nada que indique pertenencia, es decir, no podemos poseer 500 Gases ni guardar en un monedero 350 Gases. Solo existe dentro de la Máquina Virtual Ethereum para contar la cantidad de trabajo que está realizando.

Una unidad de Gas corresponde a la ejecución de una instrucción, como por ejemplo, un paso computacional.

Entonces, ¿cómo “cobran” los mineros el Gas que adquieren como recompensa?

El Gas en sí no vale nada, y por lo tanto no se puede cobrar. Para “cobrar” ese Gas usado hay que darle valor a esos recursos consumidos, es decir, valorar monetariamente el trabajo realizado por los mineros. La cantidad de Gas usado en una transacción o en un contrato inteligente tiene un precio equivalente en Ether.

Este precio se llama ‘Gas price’ y explicaremos en qué consiste más adelante, pero ahora pondremos un ejemplo para que se entienda mejor la forma de “cobrar” el Gas por parte de los mineros:

Realizar una simple transacción de Ether de un monedero a otro cuesta 21.000 Gas (cantidad estándar).

Si ese Gas tiene un precio de 0.0005 Ether por cada 100 unidades, el coste de esa transacción será de:

(21.000 / 100) x 0,0005 = 0,105 Ether

Lo que cobraría el minero no sería 21.000 Gas, sino que sería 0,105 Ether por procesar esa transferencia.

En el ejemplo anterior el precio que hemos puesto ha sido de 0,0005 Ether por cada 100 unidades de Gas. No obstante, este era un valor aleatorio y la realidad es diferente.
Después de aclarar la forma en la que los mineros “cobran” el Gas usado, la siguiente pregunta puede parecer necesaria:

¿POR QUÉ SE PAGA GAS EN VEZ DE ETHER DIRECTAMENTE?

El Ether es un bien de valor volátil, como el oro: un día vale más, otro día vale menos, y su valor puede cambiar muy rápido.

Por contra, el coste -en Gas- de las operaciones en la red de Ethereum se mantiene constante según unos parámetros de su protocolo, es decir, no sube o baja el Gas que cuesta una transacción por el hecho de que suba o baje el valor del Ether.

Si esto no funcionase así como funciona, se tendría que actualizar el código del protocolo de Ethereum cada vez que el valor del Ether cambiase para mantener el precio del gasto computacional en un rango normal y mantener el sistema utilizable, lo cual es insostenible (el precio del Ether varía cada minuto).

Por ello, resulta de verdadera utilidad el hecho de separar el coste del Gas del precio del Ether. Así se da la opción de poder alterar la cantidad de Gas a utilizar en una transacción y el precio a pagar por ella, estando completamente bajo nuestro control, sin que el sistema corra peligro.

Esta característica aporta estabilidad al sistema por el hecho de no crear un mercado paralelo entorno al Gas.

EL GAS DENTRO DE LA TRANSACCIÓN

Dentro de una transacción de Ethereum existen varias partes como por ejemplo el estado de la transacción, la marca temporal que indica el momento exácto en el que fue procesada, o el número del bloque en el que fue añadida.

Gas dentro de la transacción

Sin embargo, en este artículo veremos las partes que tienen que ver con el Gas (las que están dentro del cuadro rojo en la imagen anterior).

Gas Limit: Límite de Gas

Este dato indica el valor máximo de Gas que una transacción puede llegar a consumir para ser válida.

Normalmente, el software que se suele utilizar para realizar transacciones en la red Ethereum calcula de forma automática una estimación de la cantidad de Gas necesaria para llevar a cabo dicha transacción y nos lo muestra de forma inmediata.

Como explicamos antes, una transacción simple en el que se pasa Ether de una dirección A a otra dirección B solo necesita de 21.000 Gas. La imagen que hemos compartido del portal Etherscan nos muestra precisamente ese ejemplo. Por ello el ‘Gas Limit’ es de 21.000 unidades: una transacción monetaria simple no podría superar esa cantidad.

En el caso de ejecutar un contrato inteligente, depende de lo complejo que sea, costará más o menos, y por lo tanto el ‘Gas Limit’ variará.

Gas used by Tx: Gas usado por la transacción

Este dato, también conocido a secas como ‘Gas used’, indica el Gas que ha necesitado la transacción para que se llevase a cabo. En otras palabras, el gasto computacional o el trabajo de los mineros que ha sido necesario para procesar la transacción.

En nuestra imagen este valor es de 21.000 Gas y justo coincide con el ‘Gas Limit’, aunque no necesariamente tiene que ser así. De hecho, lo más común es que el Gas usado sea menor que el límite de Gas.

Lo que resulta imposible es que el Gas usado sea mayor que el límite de Gas, ya que, como su propio nombre indica, el límite no se puede superar.

Sin embargo, si el gasto computacional ha sido mayor que el limite de Gas que se ha seleccionado para la transacción, ésta aparecerá como fallida.

En ese caso, no se perderá el valor que queríamos enviar mediante esa transacción, pero si se deberá pagar por el total del Gas usado por la misma.

Explicado con números, si queríamos enviar 5 Ether y la transacción es fallida porque el Gas usado es mayor que el límite de Gas, esos 5 Ether se quedarán en nuestro wallet de Ethereum, pero deberemos pagar lo correspondiente a esos 21.000 unidades de Gas que costó la transacción.

Para saber cuanto es lo correspondiente -en Ether- a una cantidad de Gas, existe el concepto de ‘Gas price’, que ya mencionamos anteriormente.

Gas price: Precio del Gas

El valor ‘Gas price’ señala el precio de cada unidad de Gas. Éste es variable y son los mineros los que acuerdan subir su precio o bajarlo. Para ver cual es el precio actual del Gas recomendamos visitar la web ETH Gas Station que tiene como objetivo aumentar la transparencia de los precios y de los tiempos de confirmación de las transacciones en la red Ethereum.

Este precio viene dado en GigaWei (Gwei), una submedida del Ether. Al cambio, 1 Gwei viene a ser 0,000000001 Ether. Si queréis saber más acerca de las submedidas del Ether os recomendamos echarle un ojo a nuestra guía de medidas.

En la imagen que hemos puesto como ejemplo de una transacción, el precio del Gas es de 4 Gwei, o lo que es lo mismo 0,000000004 Ether.

También debemos mencionar que, aunque el precio del Gas es el que es, nosotros podemos determinar tanto su precio como el límite de Gas que queremos pagar a la hora de realizar una transacción en Ethereum.

Cuando realizamos una transacción, nosotros podemos pagar más Gas del establecido para que la transacción se lleve a cabo más rápido.

Lo explicaremos de forma más sencilla a través de un ejemplo:

Gas ejemplo 1

Aquí tenemos una transacción vía Metamask antes de ser ejecutada. En ella, debido su coste computacional, nos muestra un ‘Gas limit’ de 135.963 Gas, el cual es una estimación. También podemos observar que el precio del Gas es de 25 GWei, y la comisión máxima de la transacción asciende a 1,57 dólares americanos (USD), una cantidad bastante baja teniendo en cuenta la cantidad de dinero que queremos mover: 178 dólares, que como vemos, equivalía en ese momento a 0.387617 Ether.

Vamos a aumentar el precio del Gas a 250 Gwei y pasaremos a analizar el cambio:

Gas ejemplo 2

Como podemos observar, la comisión (Max Transaction Fee) ahora es de 15.67$. Es decir, al pasar de un ‘Gas price’ de 25 Gwei a uno de 250 Gwei, el aumento de la comisión ha sido de 14,10$.

Este aumento del Gas price, y por lo tanto de la comisión, es lo que hace de nuestra transacción algo atractivo para los mineros. En otras palabras, un aumento en el ‘Gas price’, o lo que es lo mismo, una tarifa alta de transacción, incentiva a los mineros a procesar nuestra transacción antes que otras que estaban en cola.

Si no tenemos prisa para que nuestra transacción sea validada, no hace falta que toquemos el precio del Gas, ya que se procesará igualmente, pero no tan rápido como si pagamos más.

De forma contraria, si modificamos el precio del Gas por debajo de su umbral, nuestra transacción no será rentable para los mineros. Éstos tendrían que realizar un gasto computacional mayor con respecto a la comisión que cobrarían, por lo que quizá no les compensaría.

En ese caso, nuestra transacción será marcada como inválida y aun así deberemos pagar a los mineros por el Gas usado en la transacción. Dicho de otro modo, si nuestra transacción se queda sin Gas sería fallo nuestro.

El minero no la completaría pero, sin embargo, sí cobraría esa comisión por su trabajo realizado, lo cual resulta justo.

Actual Tx Cost – Fee: Coste actual de la Transacción – Comisión

Este dato nos da la comisión total que se cobra por una transacción concreta. Depende directamente de las variables ‘Gas used’ y ‘Gas price’.

Para explicarlo de una forma más clara y sencilla podríamos poner estas dos variables de forma que el precio del Gas sería similar al precio por hora trabajada de un minero, y el Gas usado sería las horas trabajadas por ese minero.

En este caso, para sacar el salario del minero deberíamos multiplicar el número de horas por el precio por hora.

La fórmula llevada al entorno Ethereum sería algo así:

Coste Actual de la Transacción – Comisión = Gas usado * precio del Gas

Si nos fijamos en la imagen de la transacción y aplicamos la fórmula, podemos ver que las matemáticas funcionan:

  • Gas usado: 21000 Gas
  • Precio del Gas: 0.000000004 Ether (4 Gwei)
  • Coste actual de la transacción = 21000 * 0.000000004 = 0,000084 Ether

También nos da el dato -entre paréntesis- de su coste en moneda fiat (el dólar en ese caso). En este caso concreto esos 0.000084 Ether equivalían a 0,08$, es decir, el precio del Ether en el momento de procesar esa transacción era de 952,38$.

A fin de cuentas, la conclusión que podemos sacar es que esta comisión de la transacción es el cargo máximo que pagaremos por procesarla. Si el Gas es sobreestimado, se reembolsará en nuestra cuenta cualquier cantidad adicional, por pequeña que sea.

Cumulative Gas used: Gas usado acumulado

Aunque este dato no sea muy relevante, nos permite hacernos una idea general. Este Gas usado acumulado se refiere al total de Gas usado por todas las transacciones que están añadidas a ese bloque.

Para explicar los conceptos anteriores, nos hemos basado en el Gas de una única transacción. El Gas usado de esa transacción era de 21.000 Gas. Pero en un bloque no sólo se procesa una transacción.

Si sumamos el Gas de todas las transacciones procesadas en ese bloque, obtendremos este dato del Gas usado acumulado, que en este caso que estamos viendo es de 7.986.245.
Quedémonos con este número, que lo vamos a ver en el próximo apartado.

EL GAS DENTRO DEL BLOQUE

Una vez visto como funciona el Gas dentro de una transacción en la red Ethereum, vamos a ver ahora su función dentro de un bloque de la Blockchain formado por muchas transacciones.

Para hacerlo más sencillo, vamos a poner la imagen del bloque en el cual estaba añadida la transacción que hemos visto en el apartado anterior:

Gas dentro del bloque

Como vemos, se repiten los campos de ‘Gas Limit’ y ‘Gas Used’. No entraremos otra vez a definir lo que significan de una forma extensa, pero sí de forma breve.

Gas Used: Gas usado

El concepto de Gas usado en un bloque de Ethereum se refiere al Gas usado por todas las transacciones que están añadidas a ese bloque.

(esta expresión nos suena familiar, ¿verdad?)

Si, este concepto de Gas usado se refiere exactamente a lo mismo que el concepto de Gas usado acumulado que acabamos de ver en el apartado anterior. De hecho, si recordamos el número que recomendamos tener a mano para este apartado, resulta ser el mismo que el de la imagen del bloque: 7.986.245.

Si nos fijamos bien, también aparece -entre paréntesis- un porcentaje de un 99.83%. Este porcentaje nos da a entender que esta cantidad de Gas (7.986.245) es un 99,83% de otra cantidad que, en este caso es el límite de Gas del bloque.

Gas Limit: Límite de Gas

Este concepto, al igual que cuando lo hemos visto desglosando la transacción, se refiere al límite de Gas que tiene el bloque para ser validado.

Si recordamos, en la transacción, el límite de Gas se muestra como un dato estimado: dependiendo de lo complejo de la transacción o el contrato inteligente a ejecutar, el ‘Gas Limit’ aumenta o disminuye.

En el caso del bloque funciona diferente a como funciona en una transacción: el limite de Gas nos muestra la cantidad máxima de Gas que puede ser usado entre todas las transacciones que se añadan a ese bloque. Esto determina un espacio máximo en el bloque con respecto al número de transacciones que pueden ser añadidas.

Lo entenderemos mejor viendo el siguiente ejemplo:

Pongamos que tenemos un bloque que tiene un límite de Gas de 10. También tenemos 5 transacciones cuyos límites de Gas son 1, 2, 3, 4 y 5 respectivamente.

gas que es ether

Los mineros deciden cómo llenar un bloque con transacciones sin sobrepasar el límite de Gas del bloque. Da lo mismo cómo lo hagan y cuántas transacciones añadan al bloque. La única regla es añadir el máximo de transacciones posibles sin sobrepasar ese límite de Gas de 10.

En nuestro ejemplo solo hay 3 formas de llenar el bloque sin sobrepasar el ‘Gas limit’:

Ejemplo Bloques 2

Vistas las 3 formas posibles de completar el bloque sin sobrepasar el ‘Gas Limit’, los mineros buscarán la que sea más rentable para ellos, teniendo en cuenta las comisiones que ganarían en cada transacción.

Una vez entendido nuestro ejemplo, podemos observar otra vez nuestra imagen del bloque de Etherscan en la que el ‘Gas Limit’ del bloque es de 8.000.000. Ese es el valor aproximado de límite de Gas por bloque en el momento de escribir este artículo. No obstante, en algunos bloques se supera ese valor y en otros bloques ni siquiera llega al mísmo.

Esto ocurre gracias a que el protocolo de Ethereum permite a los mineros ajustar este valor en torno a 1/1024, o lo que es lo mismo un 0,0976%. Es por ello que no siempre vemos un ‘Gas Limit’ de 8.000.000 exactos, sino que varía muy poquito, ya sea hacia arriba o hacia abajo.

Block Reward: Recompensa del bloque

Este concepto se refiere a la recompensa que el minero -o grupo de mineros- ha recibido por validar ese bloque y añadirlo a la cadena de bloques.

Aparentemente este dato no tiene nada que ver con el Gas, pero en realidad sí está algo relacionado. Como vemos en la imagen, la recompensa es de 3,5347484961436672. Entre paréntesis nos lo desglosa como “3 + 0,5347484961436672”.

‘3’ es la recompensa fija por bloque minado en Ethereum. El resto de decimales que están detrás del “3” se refieren a la suma de las comisiones de todas las transacciones añadidas al bloque.

Si recordamos el sub apartado donde explicábamos qué era el Coste actual de la transacción, decíamos que era la comisión que cobraban los mineros. Pues si cogemos ese dato de cada transacción añadida a este mismo bloque y los sumamos, obtendremos ese valor -en Ether- con tantos decimales.

Aunque parece que solo hablamos de transacciones, en un bloque también pueden estar añadidos smart contracts, los cuales también tienen su consumo de Gas. Sin embargo, calcular éste en un contrato inteligente es algo más complejo.

EL GAS EN UN SMART CONTRACT

Antes de nada, si no se está muy familiarizado con este concepto recomendamos echar un vistazo a nuestro artículo sobre smart contracts (contratos inteligentes), donde podrás aprender qué son y para qué sirven.

De forma resumida, diremos que un smart contract o contrato inteligente de Ethereum es un programa informático que se ejecuta a sí mismo de forma automática cuando se dan los acuerdos establecidos en el mismo.

Es decir, se autoejecuta cuando se cumplen las condiciones programadas con anterioridad.

Estos contratos están escritos bajo el lenguaje Solidity, un lenguaje de programación creado específicamente para la creación de smart contracts. Cuando estos contratos son compilados se convierten en una serie de códigos de operación llamados ‘opcodes’ (operation codes).

Para entenderlo de forma fácil, estos códigos de operación (opcodes) se muestran bajo sus nombres nemotécnicos tales como ADD (del inglés ‘Addition’), o MUL (del inglés ‘Multiplication’). Esto es como si en español pusieramos ‘SUM’ en vez de ‘suma’, RES en vez de ‘resta’ o DIV en vez de ‘división’.

Simplemente se usan comandos que vienen del inglés, como se suele hacer en informática.

Estos ‘opcodes’ los podemos encontrar en el Yellow Paper de Ethereum, más concretamente en el Apéndice G (Appendix G). De todas formas, a continuación dejamos la imagen con ese apéndice y los ‘opcodes’:

Yellow Papper Opcodes

Como podemos ver en la imagen, en la columna de la izquierda vienen los nombres de estos ‘opcodes’ y en la columna de la derecha viene la descripción de éstos.

Pero hay una columna más: la columna ‘Value’ (valor), que es el consumo en unidades de Gas por cada ‘opcode’. Es decir, cada vez que un contrato inteligente usa uno de esos ‘opcodes’, se consume esa cantidad de Gas.

Gtransaction opcode

Si nos fijamos en el ‘opcode’ “Gtransaction”, su valor es de 21.000 y su descripción hace mención de pagar ese valor por cada transacción. Esto es a lo que nos referíamos cuando decíamos que el Gas usado por realizar una simple transacción es de 21.000 Gas.

Por cuestiones de actualización en la plataforma Ethereum, el coste de Gas por cada ‘opcode’ puede variar. Existe un repositorio de Github en el cual se puede encontrar un documento de Google Docs con una tabla actualizada de los valores del Gas por cada ‘opcode’. Para que ni te tengas que molestar en buscarla te la adjuntamos aquí.

GAS: EN RESUMEN

  • El Gas es el coste que tiene el realizar una operación o un conjunto de operaciones en la red Ethereum. En definitiva el “GASto” computacional de una transacción.
  • Las funciones del Gas son:
    – Poner un coste a las operaciones realizadas.
    – Asegurar el sistema contra el spam y la información inútil.
    – Recompensar a los mineros por su gasto computacional.
  • El Gas no es una nueva moneda digital. No se pueden almacenar 1000 unidades de Gas en un monedero, ni traspasarlos a nadie.
  • El motivo por el que se “paga” Gas y no Ether directamente es por el valor volátil del Ether. Si se pagase en Ether, el precio de cada transacción variaría con cada variación del Ether y sería insostenible e incontrolable. De esta forma, el precio de las transacciones está bajo el control de los participantes de la red.
  • El ‘Gas limit’ de una transacción indica el valor máximo de Gas que una transacción puede llegar a consumir para ser válida. Cuando nos referimos al límite de Gas de un bloque hace referencia a la cantidad máxima de Gas que puede ser usado entre todas las transacciones que se añadan a ese bloque.
  • El ‘Gas used’ de una transacción indica el Gas que ha necesitado la transacción para que se llevase a cabo. En el caso de referirnos al Gas usado de un bloque hace referencia al Gas usado por todas las transacciones que están añadidas a ese bloque.
  • El ‘Gas price’ en una transacción señala el precio de cada unidad de Gas (en Gwei, una submedida del Ether).
  • La comisión de una transacción sale de multiplicar la cantidad de Gas usado por el precio del Gas.
  • Cuando sumamos las comisiones de todas las transacciones procesadas en un bloque y añadimos la recompensa que se genera por defecto al validar un bloque (actualmente 3 Ether), obtenemos el valor de ‘Block reward’ o Recompensa del bloque. Esta recompensa es obtenida por el minero o grupo de mineros que validaron el bloque.
  • En un contrato inteligente, el Gas varía según los ‘opcodes’ utilizados. Estos ‘opcodes’ son códigos de operación cuyo consumo de Gas es variable. Por ejemplo, sumar una cantidad usando el ‘opcode’ ADD cuesta 3 Gas y enviar Ether de una Wallet a otra cuesta 21.000 Gas.

Add a comment