El concepto de Gas en Ethereum a menudo se confunde con el concepto de Ether, pero lejos de ser lo mismo, son dos herramientas con funciones completamente diferentes dentro del protocolo de Ethereum. En el presente artículo explicamos en detalle por qué es tan importante el Gas en el ecosistema Ethereum, y veremos conceptos como gasPrice, o gasLimit, entre otros, que nos ayudarán a entender como se Gestiona el Gas en las transacciones. 

¿Qué es el Gas?

A grandes rasgos, se puede decir que el Gas es una moneda virtual, la cual dispone de su propio ratio de intercambio frente al Ether. El Gas es la gasolina de Ethereum, ya que permite que las transacciones puedan ser ejecutadas en la cadena de bloques.

¿Por qué el Gas es tan importante?

El modelo de computación que implementa el protocolo de Ethereum es cuasi Turing Complete, lo que significa que, en principio, se puede ejecutar cualquier programa. Esta característica, implica que puede haber programas que pueden estar casi infinitamente ejecutándose, o bien por accidente, o bien maliciosamente, creando ataques de Denegación de Servicio y transacciones que consumen demasiados recursos. Es por ello que Ethereum usa el concepto de Gas, para controlar la cantidad de recursos que las transacciones lanzadas pueden usar para ejecutarse y así evitar los problemas anteriores que pueden llegar a colapsar la red. Si después de una determinada cantidad de computación, la ejecución de la transacción no termina, la EVM (Ethereum Virtual Machine) la interrumpe. Como consecuencia, decimos que Ethereum es cuasi Turing Complete y no Turing Complete, ya que se puede hacer correr cualquier programa, pero solo se acabarán ejecutando aquellos que terminen consumiendo una cantidad predefinida máxima de computación.

¿Es lo mismo el Gas que el Ether?

El Gas y el Ether son dos monedas virtuales, implementadas en la Blockchain de Ethereum, completamente diferentes. El Gas ha sido diseñado para estar separado del Ether con el fin de proteger el protocolo de Ethereum de la volatilidad que pueda sufrir el Ether en los mercados con respecto a monedas fiduciarias. En la web ETH Gas Station (https://ethgasstation.info/) se pueden consultar los precios del Gas, así como usar diferentes herramientas relacionadas con el consumo de Gas por parte de las transacciones.

¿Cómo se gestiona el Gas en el protocolo de Ethereum?

A nivel de transacción, existen dos campos importantes que gestionan el Gas. Por un lado, el campo gasPrice refleja el precio en wei (1 ETH es 1.000.000.000.000.000.000 wei.) que el originador de la transacción está dispuesto a pagar por unidad de Gas. Cuanto más alto sea el gasPrice, más rápida será la la ejecución de la transacción en la red. Esto es así, ya que cuando se está construyendo un nuevo bloque, los mineros pueden seleccionar primero aquellas transacciones que tengan un gasPrice alto, obteniendo así mayor recompensa por su trabajo. Aún así, el valor mínimo que puede tomar el campo gasPrice es 0. Es decir, el protocolo de Ethereum permite transacciones libres de tasas. Si la congestión de la red siempre es alta, podría darse la circunstancia de que estas transacciones nunca fuesen ejecutadas, pero es poco probable que esto suceda, por lo que estas transacciones serán ejecutadas cuando haya una baja demanda en la red, y sobren espacios en los nuevos bloques creados. 

Por otro lado, el campo gasLimit indica el número máximo de unidades de gas que el originador de la transacción está dispuesto a gastar para que la transacción se ejecute en la red de Ethereum. Por lo tanto, para saber la cantidad de wei que el originador de una transacción está dispuesto a pagar para que se ejecute, habrá que multiplicar gasPrice*gasLimit.

Con el fin de prevenir ejecuciones infinitas en las transacciones, ya sea por accidente, o malintencionadamente, el protocolo de Ethereum se asegura de validar que la cuenta desde la que se lanza la transacción disponga de saldo suficiente (en wei) como para que la transacción pueda ser ejecutada en la blockchain. Si no es así, la transacción no podrá ser lanzada. La cantidad de wei a pagar (la tasa, fee o comisión de la transacción), no se consume de la cuenta del originador de la transacción hasta que la transacción haya sido felizmente ejecutada y su importe ascenderá a gasPrice * gasFee (Precio por unidad de gas por el que se está dispuesto a pagar, por el total de unidades de gas usado para ejecutar la transacción).

De esta forma, se penaliza o se desincentiva a los posibles atacantes que intenten lanzar transacciones spam ya que deberán pagar por los recursos computacionales de ancho de banda, y de almacenamiento que consuman dichas transacciones maliciosas.

Hay que darse cuenta que gasFee y gasLimit no siempre tienen por qué coincidir, ya que gasFee es la cantidad de Gas que finalmente el protocolo ha consumido para poder ejecutar la transacción, y será siempre menor o igual al gasLimit, que recordemos, es la cantidad de Gas que el originador de la transacción está dispuesto a pagar, como límite máximo.

Cada operación (opcode) ejecutada en una transacción o Smart Contract cuesta una cantidad fija predefinida de unidades de gas. Es lo que se conoce como gasCost. Cuando la EVM (Ethereum Virtual Machine) va a ejecutar una transacción, recibe una cantidad de gas igual a la indicada en el campo gasLimit de la transacción. Previamente a cada operación (opcode) que se ejecuta, la EVM comprueba que hay suficiente gas como para pagar la ejecución de dicha operación, y en caso afirmativo se ejecuta dicha operación descontando el saldo de gas disponible. Si se llega al caso de que no quede más Gas para pagar la ejecución de todas las operaciones que tiene la transacción, la ejecución de la misma es abortada y la transacción es revertida, quedándose el minero con el gas consumido por haber ejecutado ciertas operaciones (no todas), y todos los cambios en el estado de la cadena son deshechos. En este caso, el emisor de la transacción pierde la cantidad de gas que se quedan los mineros, sin que la transacción se haya ejecutado. Por el contrario, si la EVM consigue alcanzar el final de la ejecución de la transacción satisfactoriamente sin consumir todo el gasLimit, se paga al minero una tasa o fee que corresponde a la siguiente fórmula: “miner fee = gasCost (de la suma de las operaciones ejecutadas)*gasPrice”. En caso de sobrar Gas del suministro inicial (gasLimit), se devuelve al originador de la transacción según las siguientes fórmulas: “gas sobrante = gasLimit – gasCost”, y “wei sobrante = gas sobrante * gasPrice ”.

Hay otro concepto relacionado con el gas que es importante. Se trata del Block Gas Limit, o Límite del Gas del Bloque. En este caso, se trata de la máxima cantidad de gas que puede ser consumida por las transacciones que forman un nuevo bloque minado. Este concepto determina el número de transacciones que contiene un nuevo bloque. El valor que tiene en cada momento el Block Gas Limit es consensuado colectivamente por el grupo de mineros de la red.

En conclusión

A modo de conclusión, podemos decir que el Gas es una herramienta fundamental en el protocolo de Ethereum, que realiza una doble función. Por un lado sirve de regulador entre la volatilidad del precio del Ether, y las recompensas que los mineros reciben. Y por otro lado, sirve para gestionar, de forma adecuada, los recursos computacionales y de almacenamiento de su Blockchain, asegurándose así de evitar ataques de denegación de servicio.