Gas is the internal pricing for running a transaction or contract in Ethereum. At the time of writing before the launch of Frontier it is fixed to 10 Szabo, which is about 1/100,000 of an Ether. It's to decouple the unit of Ether (ETH) and its market value from the unit to measure computational use (gas). Thus, a miner can decide to increase or decrease the use of gas according to its needs, while if need be, the price of gas can be increased or decreased accordingly, avoiding a situation in which an increase in the price of ETH would cause the need to change all gas prices. This is also a response to the discussion in bitcoin about fees structure.
The gas system is not very different from the use of Kw for measuring electricity home use. One difference from actual energy market is that the originator of the transaction sets the price of gas, to which the miner can or not accept, this causes an emergence of a market around gas. You can see the evolution of the price of gas here: https://etherscan.io/charts/gasprice
With Ethereum there is a blocksize limit too – so you’re paying for premium space in the next block just like with Bitcoin.
With Bitcoin miners prioritise transaction with the highest mining fees. The same is true of Ethereum where miners are free to ignore transactions whose gas price limit is too low.
The gas price per transaction or contract is set up to deal with the Turing Complete nature of Ethereum and its EVM (Ethereum Virtual Machine Code) – the idea being to limit infinite loops. So for example 10 Szabo, or 0.00001 Ether or 1 Gas can execute a line of code or some command. If there is not enough Ether in the account to perform the transaction or message then it is considered invalid. The idea is to stop denial of service attacks from infinite loops, encourage efficiency in the code – and to make an attacker pay for the resources they use, from bandwidth through to CPU calculations through to storage.
The more complex the commands you wish to execute, the more gas (and Ether) you have to pay. For example if A wants to send B 1 Ether unit – there would be a total cost of 1.00001 Ether to be paid by A. However if A wanted to form a contract with B depending on the future price of Ether, there would be more lines of code executable and more of an onus or energy consumption placed on the distributed Ether network – and therefore A would have to pay more than the 1 Gas done in the transaction.
Some computational steps cost more than others as well either because they are computationally expensive or because they increase the amount of data that has to be stored in the state. Here are a list of operations in the Ethereum Virtual Code and their costs in gas (which is Ethers!).
Operation name Gas Cost Function
step | 1 | Default amount of gas to pay for an execution cycle. |
stop | 0 | Nothing paid for the SUICIDE operation. |
sha3 | 20 | Paid for a SHA3 operation. |
sload | 20 | Paid for a SLOAD operation. |
sstore | 100 | Paid for a normal SSTORE operation (doubled or waived sometimes). |
balance | 20 | Paid for a BALANCE operation |
create | 100 | Paid for a CREATE operation |
call | 20 | Paid for a CALL operation. |
memory | 1 | Paid for every additional word when expanding memory |
txdata | 5 | Paid for every byte of data or code for a transaction |
transaction | 500 | Paid for every transaction |
The gas price limit is fixed at present to provide for a stable launch of Ethereum but will be allowed to free float according to the demand and the amount of total gas per block will be increased gradually to encourage the stability of the Ethereum network.