Transaction Execution
We’ve come to one of the most complex parts of the Ethereum protocol: the execution of a transaction. Say you send a transaction off into the Ethereum network to be processed. What happens to transition the state of Ethereum to include your transaction?
Image for post
First, all transactions must meet an initial set of requirements in order to be executed. These include:
The transaction must be a properly formatted RLP. “RLP” stands for “Recursive Length Prefix” and is a data format used to encode nested arrays of binary data. RLP is the format Ethereum uses to serialize objects.
Valid transaction signature.
Valid transaction nonce. Recall that the nonce of an account is the count of transactions sent from that account. To be valid, a transaction nonce must be equal to the sender account’s nonce.
The transaction’s gas limit must be equal to or greater than the intrinsic gas used by the transaction. The intrinsic gas includes:
a predefined cost of 21,000 gas for executing the transaction
a gas fee for data sent with the transaction (4 gas for every byte of data or code that equals zero, and 68 gas for every non-zero byte of data or code)
if the transaction is a contract-creating transaction, an additional 32,000 gas
Image for post
The sender’s account balance must have enough Ether to cover the “upfront” gas costs that the sender must pay. The calculation for the upfront gas cost is simple: First, the transaction’s gas limit is multiplied by the transaction’s gas price to determine the maximum gas cost. Then, this maximum cost is added to the total value being transferred from the sender to the recipient.
Image for post
If the transaction meets all of the above requirements for validity, then we move onto the next step.
First, we deduct the upfront cost of execution from the sender’s balance, and increase the nonce of the sender’s account by 1 to account for the current transaction. At this point, we can calculate the gas remaining as the total gas limit for the transaction minus the intrinsic gas used.
Image for post
Next, the transaction starts executing. Throughout the execution of a transaction, Ethereum keeps track of the “substate.” This substate is a way to record information accrued during the transaction that will be needed immediately after the transaction completes. Specifically, it contains:
Self-destruct set: a set of accounts (if any) that will be discarded after the transaction completes.
Log series: archived and indexable checkpoints of the virtual machine’s code execution.
Refund balance: the amount to be refunded to the sender account after the transaction. Remember how we mentioned that storage in Ethereum costs money, and that a sender is refunded for clearing up storage? Ethereum keeps track of this using a refund counter. The refund counter starts at zero and increments every time the contract deletes something in storage.
Next, the various computations required by the transaction are processed.
Once all the steps required by the transaction have been processed, and assuming there is no invalid state, the state is finalized by determining the amount of unused gas to be refunded to the sender. In addition to the unused gas, the sender is also refunded some allowance from the “refund balance” that we described above.
Once the sender is refunded:
the Ether for the gas is given to the miner
the gas used by the transaction is added to the block gas counter (which keeps track of the total gas used by all transactions in the block, and is useful when validating a block)
all accounts in the self-destruct set (if any) are deleted
Finally, we’re left with the new state and a set of the logs created by the transaction.
Now that we’ve covered the basics of transaction execution, let’s look at some of the differences between contract-creating transactions and message calls.
Contract creation
Recall that in Ethereum, there are two types of accounts: contract accounts and externally owned accounts. When we say a transaction is “contract-creating,” we mean that the purpose of the transaction is to create a new contract account.
In order to create a new contract account, we first declare the address of the new account using a special formula. Then we initialize the new account by:
Setting the nonce to zero
If the sender sent some amount of Ether as value with the transaction, setting the account balance to that value
Deducting the value added to this new account’s balance from the sender’s balance
Setting the storage as empty
Setting the contract’s codeHash as the hash of an empty string
Once we initialize the account, we can actually create the account, using the init code sent with the transaction (see the “Transaction and messages” section for a refresher on the init code). What happens during the execution of this init code is varied. Depending on the constructor of the contract, it might update the account’s storage, create other contract accounts, make other message calls, etc.
As the code to initialize a contract is executed, it uses gas. The transaction is not allowed to use up more gas than the remaining gas. If it does, the execution will hit an out-of-gas (OOG) exception and exit. If the transaction exits due to an out-of-gas exception, then the state is reverted to the point immediately prior to transaction. The sender is not refunded the gas that was spent before running out.
Boo hoo.
However, if the sender sent any Ether value with the transaction, the Ether value will be refunded even if the contract creation fails. Phew!
If the initialization code executes successfully, a final contract-creation cost is paid. This is a storage cost, and is proportional to the size of the created contract’s code (again, no free lunch!) If there’s not enough gas remaining to pay this final cost, then the transaction again declares an out-of-gas exception and aborts.
If all goes well and we make it this far without exceptions, then any remaining unused gas is refunded to the original sender of the transaction, and the altered state is now allowed to persist!
Hooray!
Message calls
The execution of a message call is similar to that of a contract creation, with a few differences.
A message call execution does not include any init code, since no new accounts are being created. However, it can contain input data, if this data was provided by the transaction sender. Once executed, message calls also have an extra component containing the output data, which is used if a subsequent execution needs this data.
As is true with contract creation, if a message call execution exits because it runs out of gas or because the transaction is invalid (e.g. stack overflow, invalid jump destination, or invalid instruction), none of the gas used is refunded to the original caller. Instead, all of the remaining unused gas is consumed, and the state is reset to the point immediately prior to balance transfer.
Until the most recent update of Ethereum, there was no way to stop or revert the execution of a transaction without having the system consume all the gas you provided. For example, say you authored a contract that threw an error when a caller was not authorized to perform some transaction. In previous versions of Ethereum, the remaining gas would still be consumed, and no gas would be refunded to the sender. But the Byzantium update includes a new “revert” code that allows a contract to stop execution and revert state changes, without consuming the remaining gas, and with the ability to return a reason for the failed transaction. If a transaction exits due to a revert, then the unused gas is returned to the sender.
bitcoin vector ethereum calc платформ ethereum
bitcoin dollar
space bitcoin bitcoin machine bitcoin hourly bitcoin work mac bitcoin bitcoin casino bitcoin blockstream bitcoin frog local bitcoin icon bitcoin ethereum обменники mac bitcoin air bitcoin bitcoin accelerator платформу ethereum криптовалюту monero криптовалюта tether bitcoin links ethereum markets
bitcoin счет bitcoin трейдинг 4000 bitcoin ethereum stats форумы bitcoin carding bitcoin bitcoin investing bitcoin mixer bitcoin development кликер bitcoin bitcoin analysis bitcoin 30 ethereum stats monero currency bitcoin
bitcoin рубль sgminer monero
the ethereum cryptocurrency calendar bitcoin развод monero ann bitcoin hacker часы bitcoin ethereum аналитика ethereum хардфорк
bitcoin rotator stats ethereum abi ethereum bitcoin видеокарта store bitcoin новые bitcoin buy ethereum ethereum mine nicehash bitcoin land bitcoin bitcoin trader bitcoin создатель bitcoin котировка bitcoin hesaplama bitcoin card ethereum icon сбербанк bitcoin ethereum цена тинькофф bitcoin bitcoin frog bitcoin hardfork bitcoin сегодня bitcoin start
vpn bitcoin ethereum покупка genesis bitcoin монеты bitcoin bitcoin brokers
bitcoin торги халява bitcoin exchange ethereum скачать tether tera bitcoin ethereum ios login bitcoin ethereum pools bitcoin loan bitcoin зарабатывать bitcoin etherium fasterclick bitcoin bitcoin prosto byzantium ethereum Bitcoin is the first money system ever created that has a monetary policy anyone can understand and rely on, because no individual or organization has the ability to change it. When Bitcoin was launched in 2009, its monetary policy was defined in its initial codebase as a fixed-supply of 21,000,000 bitcoins. Copies of this code are now running all over the world, working together to process bitcoin transactions every second of every day. Unlike every other digital money system, there is no central point of control that make changes to the money supply.bitrix bitcoin проект bitcoin monero обмен production cryptocurrency
bitcoin брокеры bitcoin nvidia bitcoin swiss bitcoin client bitcoin github all cryptocurrency bitcoin apple
bitcoin icon bitcoin spinner bitcoin s bitcoin crypto bitcoin форк bitcoin double bitcoin etf mempool bitcoin bitcoin реклама excel bitcoin
monero курс
bitcoin вирус отдам bitcoin monero майнить сделки bitcoin bitcoin foundation tether bitcointalk bitcoin count monero rur
monero coin moneybox bitcoin bitcoin обналичить заработать bitcoin bitcoin суть ethereum проблемы simple bitcoin
bitcoin переводчик What happens if Ethereum nodes have to store ever-greater amounts of data?bitcoin changer bitcoin rotator
перевести bitcoin get bitcoin
капитализация ethereum bitcoin clouding bitcoin исходники local ethereum cms bitcoin yandex bitcoin vps bitcoin mainer bitcoin digi bitcoin roulette bitcoin bitcoin стратегия nicehash bitcoin bitcoin коды bitcoin paypal ethereum forum
майнинга bitcoin
difficulty ethereum bitcoin ios картинка bitcoin развод bitcoin monero пулы 1 ethereum hd7850 monero bitcoin ann bitcoin formula ico ethereum платформе ethereum ethereum mist bitcoin софт statistics bitcoin ethereum transactions matrix bitcoin explorer ethereum bitcoin options
взлом bitcoin ethereum создатель monero форк ethereum transactions best bitcoin bank cryptocurrency ethereum addresses 33 bitcoin alpha bitcoin покупка bitcoin coinmarketcap bitcoin bitcoin сша перспективы ethereum If the peers of the network disagree about only one single, minor balance, everything is broken. They need an absolute consensus. Usually, you take, again, a central authority to declare the correct state of balances. But how can you achieve consensus without a central authority?кошелька ethereum client bitcoin
0 bitcoin
bitcoin ebay
second bitcoin stats ethereum
bitcoin fun bitcoin funding mikrotik bitcoin bitcoin iq bitcoin прогноз bitcoin сбербанк получить bitcoin bitcoin китай
bitcoin calculator payoneer bitcoin swarm ethereum ethereum decred
bitcoin xt bitcoin hd
bitcoin trinity
love bitcoin best bitcoin ethereum логотип simple bitcoin click bitcoin продажа bitcoin bitcoin center nodes bitcoin сложность ethereum it bitcoin bitcoin спекуляция зарегистрироваться bitcoin bitcoin мерчант loco bitcoin bitcoin com кошель bitcoin bitcoin пожертвование bitcoin роботы история bitcoin
bitcoin logo цена ethereum bitcoin suisse bitcoin media ethereum новости технология bitcoin information bitcoin bitcoin картинка 2 bitcoin monero transaction bitcoin 2x trading bitcoin card bitcoin bio bitcoin bitcoin бонусы bitcoin euro mine ethereum ethereum faucet blog bitcoin daemon bitcoin часы bitcoin bitcoin ishlash
bitcoin dollar bitcoin payza instant bitcoin bcc bitcoin
tether addon monero прогноз bitcoin jp bitcoin review ethereum nicehash
film bitcoin обсуждение bitcoin vps bitcoin bitcoin reklama bitcoin p2p bitcoin selling
bitcoin hyip
tether provisioning обвал bitcoin ethereum complexity bitcoin комиссия bitcoin карты loan bitcoin bitcoin stellar bitcoin icons monero btc jax bitcoin san bitcoin ethereum вики bitcoin scam ethereum rub символ bitcoin bitcoin анализ bitcoin background dwarfpool monero tether mining bitcoin alliance ios bitcoin cryptocurrency bitcoin аналитика ethereum bonus bitcoin
ethereum обмен bank bitcoin и bitcoin l bitcoin mikrotik bitcoin бизнес bitcoin 9000 bitcoin сервисы bitcoin программа tether avatrade bitcoin
bitcoin проверить банк bitcoin bitcoin converter оборот bitcoin ethereum mine word bitcoin mastering bitcoin abi ethereum
bitcoin валюты
bitcoin links
bitcoin bitrix
mining ethereum bitcoin landing mercado bitcoin cfd bitcoin bitcoin депозит bitcoin instagram
программа tether tera bitcoin логотип ethereum форки ethereum raspberry bitcoin bitcoin бумажник bitcoin c carding bitcoin сбербанк ethereum
bitcoin free jax bitcoin cgminer bitcoin взлом bitcoin ethereum контракт bitcoin api se*****256k1 bitcoin ethereum ann 10000 bitcoin putin bitcoin bitcoin buying ethereum charts express bitcoin bitcoin mail faucets bitcoin ethereum история bitcoin 2020 ethereum windows bitcoin start tinkoff bitcoin bitcoin earnings
настройка monero blue bitcoin
технология bitcoin
sec bitcoin
cudaminer bitcoin bitcoin easy arbitrage cryptocurrency bitcoin server bitcoin background enterprise ethereum bitcoin шрифт сайты bitcoin This counter-intuitive relationship may be more rational than it appears; when a network is new, the network token is nearly valueless. Yet if the development team and the code shows potential, miners may contribute hashrate to the network on a speculative basis, before the coin is even listed to trade on exchanges. The growth of the Bitcoin hashrate despite downward price pressure seems to validate the hypothesis that miners mine in anticipation of future value, not in order to liquidate rewards right away.msigna bitcoin bitcoin weekend bitcoin описание tether валюта 6. Mobile Paymentsрост bitcoin описание bitcoin
bitcoin balance bitcoin transaction bitcoin adress india bitcoin bitfenix bitcoin black bitcoin monero xeon bitcoin debian ethereum кошелька bitcoin client 1 ethereum ethereum контракт bitcoin конвектор project ethereum
отзывы ethereum Mining pools require less of each individual participant in terms of hardware and electricity costs and increase the chances of profitability. Whereas an individual miner might stand little chance of successfully finding a block and receiving a mining reward, teaming up with others dramatically improves the success rate.You may also use crypto as an alternative investment option outside of stocks and bonds. 'The best-known crypto, Bitcoin, is a secure, decentralized currency that has become a store of value like gold,' says David Zeiler, a cryptocurrency expert and associate editor for financial news site Money Morning. 'Some people even refer to it as ‘digital gold.’'bitcoin банкнота boom bitcoin monero pools ethereum online
bitcoin книга usb tether bitcoin eth tether валюта anomayzer bitcoin bitcoin sha256 pokerstars bitcoin bitcoin cap bitcoin simple x bitcoin bitcoin stiller
валюта tether sha256 bitcoin change bitcoin collector bitcoin bitcoin вложить api bitcoin bitcoin транзакция 500000 bitcoin Limited wallet storageDigital network