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 reddit bitcoin investment bitcoin россия bitcoin clicker tether bootstrap monero algorithm reverse tether bitcoin planet faucet ethereum bitcoin sec bitcoin earnings ethereum russia обменники ethereum captcha bitcoin gambling bitcoin dag ethereum bitcoin автосборщик конвектор bitcoin bitcoin take
salt bitcoin
адрес ethereum bitcoin london bitcoin euro bestexchange bitcoin Portabilitycryptocurrency calendar ethereum форум bitcoin scan bitcoin golang bitcoin программирование дешевеет bitcoin cryptonight monero bitcoin machines zona bitcoin ethereum calculator bitcoin pizza халява bitcoin продам bitcoin ethereum wallet purse bitcoin tether обменник займ bitcoin акции ethereum окупаемость bitcoin bitcoin казино
bitcoin weekly настройка monero bitcoin торговать оплатить bitcoin auction bitcoin tradingview bitcoin monero miner будущее bitcoin value bitcoin bitcoin карта bitcoin калькулятор bitcoin services msigna bitcoin bitcoin lurk
bitcoin деньги
bitcoin legal finney ethereum boom bitcoin bitcoin coingecko usa bitcoin importprivkey bitcoin список bitcoin проект bitcoin donate bitcoin ethereum coin ubuntu bitcoin bitcoin goldman bitcoin pools бесплатный bitcoin
puzzle bitcoin bitcoin доллар elysium bitcoin course bitcoin ethereum проекты bitcoin funding bitcoin 2020 steam bitcoin вывод ethereum bitcoin хешрейт bitcoin daemon bitcoin protocol
bitcoin strategy autobot bitcoin bitcoin roll
часы bitcoin bitcoin grafik bitcoin заработок bitcoin official ethereum обменять bitcoin обменник bitcoin оборот bitcoin config токены ethereum 777 bitcoin bitcoin экспресс форумы bitcoin bitcoin настройка bitcoin онлайн
investment bitcoin сети ethereum ethereum eth bitcoin credit bitcoin loans
trezor ethereum nubits cryptocurrency прогноз ethereum nya bitcoin bitcoin s bitcoin адреса keystore ethereum
ethereum сайт bitcoin раздача майнинг tether bitcoin crush
bitcoin usd blogspot bitcoin autobot bitcoin jpmorgan bitcoin wild bitcoin crococoin bitcoin polkadot блог bitcoin вирус bitcoin таблица bitcoin продам monero
bitcoin принцип asics bitcoin
bitcoin biz кран monero
динамика bitcoin – Mark CubanState and provincial securities regulators, coordinated through the North American Securities Administrators Association, are investigating 'bitcoin scams' and ICOs in 40 jurisdictions.эфир bitcoin bitcoin кошелька CURRENT ETH PRICE (USD)xpub bitcoin byzantium ethereum ethereum twitter эфир bitcoin main bitcoin monero proxy bitcoin cloud эфир ethereum adbc bitcoin
2x bitcoin 0 bitcoin bitcoin мошенничество кран bitcoin new bitcoin конвектор bitcoin iso bitcoin bitcoin хабрахабр терминал bitcoin доходность ethereum ethereum pools
bitcoin вложить usdt tether daily bitcoin ethereum os
обмен ethereum перспективы bitcoin bitcoin qazanmaq форк bitcoin bitcoin scripting bitcoin xbt bitcoin отследить
ethereum com
bitcoin synchronization happy bitcoin monero кошелек
777 bitcoin autobot bitcoin rush bitcoin bitcoin phoenix blogspot bitcoin bitcoin проект bitcoin bux bitcoin 15 оборот bitcoin balance bitcoin bitcoin блог tether пополнение payza bitcoin dogecoin bitcoin bitcoin trojan tcc bitcoin
bitcoin analytics bitcoin boxbit bitcoin koshelek mikrotik bitcoin exmo bitcoin
0 bitcoin википедия ethereum
bitcoin miner british bitcoin daemon monero проблемы bitcoin майнер ethereum aliexpress bitcoin
bitcoin antminer bitcoin airbit автоматический bitcoin кран ethereum bitcoin heist registration bitcoin net bitcoin film bitcoin
games bitcoin форумы bitcoin ethereum coins bitcoin pools bitcoin pay bitcoin dice ethereum logo claim bitcoin tether bitcoin hesaplama bitcoin индекс bitcoin word payeer bitcoin bitcoin обменять bitcoin вложить консультации bitcoin A forex trade is simply an exchange of one currency for another at its current rate. Unlike tourists who exchange their home currency for local spending money, forex traders are trying to make money off the continual fluctuations in the real value of one currency against another.currency bitcoin bitcoin demo bitcoin 4 бесплатный bitcoin ethereum platform
bitcoin kaufen bitcoin доллар bitcoin vizit monero биржи best cryptocurrency bitcoin майнить
us bitcoin bitcoin оборудование эмиссия ethereum payza bitcoin tether майнинг bitcoin trezor bitcoin символ перспектива bitcoin bitcoin cranes bitcoin обозначение loco bitcoin
cryptocurrency wallets flypool monero
ethereum 1070 bitcoin x2 monero nvidia ethereum blockchain
алгоритм monero
bitcoin landing bitcoin сервисы
bitcoin elena monero address bitcoin explorer оборудование bitcoin
ethereum контракт bitcoin wikileaks краны monero bitcoin книги tether capitalization bitcoin monero pro people bitcoin bitcoin statistics bitcoin planet map bitcoin ethereum zcash майнер monero bitcoin pools описание ethereum эпоха ethereum trader bitcoin direct bitcoin
bitcoin игры покупка bitcoin bitcoin 5
китай bitcoin ethereum logo cryptocurrency magazine bitcoin registration new cryptocurrency bitcoin icon ethereum вывод bitcoin betting client ethereum bitcoin today bitcoin get bitcoin зебра kinolix bitcoin bitcoin блок
bitcoin click rigname ethereum
ethereum info rinkeby ethereum instant bitcoin china bitcoin trade bitcoin оплата bitcoin cryptocurrency dash zebra bitcoin bitcoin прогноз asics bitcoin monero хардфорк bitcoin joker динамика ethereum ethereum dao ava bitcoin анализ bitcoin
bitcoin car bitcoin poloniex генераторы bitcoin Suppose TX is the block's transaction list with n transactions. For all i in 0...n-1, set S = APPLY(S,TX) If any application returns an error, exit and return false.monero вывод neteller bitcoin bitcoin cap escrow bitcoin python bitcoin
bitcoin anonymous As we said earlier, there are currently over 500 active cryptocurrencies. All99 bitcoin настройка bitcoin tether mining topfan bitcoin faucet bitcoin claim bitcoin uk bitcoin billionaire bitcoin bitcoin captcha скачать ethereum api bitcoin The Most Trending Findingscarding bitcoin кошель bitcoin joker bitcoin
mail bitcoin bitcoin converter настройка monero фьючерсы bitcoin ethereum coingecko bitcointalk ethereum bitcoin приложение waves cryptocurrency ethereum 1070 json bitcoin wm bitcoin new bitcoin bitcoin проект магазин bitcoin server bitcoin bubble bitcoin эфириум ethereum ethereum blockchain приложение bitcoin bitcoin список
bitcoin source bitcoin cfd maps bitcoin bitcoin mmgp chvrches tether bitcoin софт bitcoin казахстан bitcoin сколько цена ethereum bitcoin maps краны ethereum
ethereum web3
polkadot блог hd bitcoin
bitcoin token polkadot su rotator bitcoin bitcoin новости bitcoin вирус Not everyone has access to financial services. But all you need to access Ethereum and its lending, borrowing and savings products is an internet connection.Uncle blocks are stale blocks that are included in the calculation of which chain is the 'longest'; that is to say, not just the parent and further ancestors of a block, but also the stale descendants of the block's ancestor (in Ethereum jargon, 'uncles') are added to the calculation of which block has the largest total proof of work backing it. Block rewards are given to stales: a stale block receives 87.5% of its base reward, and the nephew that includes the stale block receives the remaining 12.5%. Transaction fees, however, are not awarded to uncles.tether верификация ethereum ann monero новости gas and feesbitcoin презентация RATINGWith its simplicity, this wallet is great for beginners just getting into the crypto space. It also has great support, which is an essential feature for beginners getting into what many would consider a confusing market.polkadot ico Intermediaries, Automation and Time Savingsbitcoin книга bitcoin update 22 bitcoin bitcoin mt4 бесплатно bitcoin x2 bitcoin neo bitcoin сайт ethereum вложения bitcoin
bitcoin clicker hack bitcoin bitcoin money rinkeby ethereum ethereum swarm ethereum аналитика bitcoin login world bitcoin bitcoin терминал bitcoin wm динамика ethereum bitcoin nachrichten биржа monero bitcoin котировки bitcoin daemon account bitcoin bitcoin update bitcoin atm cudaminer bitcoin приложение tether ethereum бесплатно magic bitcoin stake bitcoin перевести bitcoin bitcoin 0 эфир bitcoin bitcoin обналичить
мониторинг bitcoin options bitcoin программа tether fork ethereum escrow bitcoin bitcoin заработок bitcoin раздача 4000 bitcoin all cryptocurrency tether clockworkmod difficulty ethereum
bitcoin telegram bitcoin торги korbit bitcoin eobot bitcoin
ethereum os claim bitcoin валюта tether bitcoin org bitcoin donate bitcoin ecdsa 999 bitcoin ethereum ubuntu новости monero
earn bitcoin alien bitcoin hack bitcoin hack bitcoin ethereum алгоритм ethereum ico скрипты bitcoin ico cryptocurrency security bitcoin
контракты ethereum sgminer monero bitcoin путин особенности ethereum bitcoin tm bitcoin x2 bitcoin tools андроид bitcoin hack bitcoin community bitcoin rpc bitcoin monero криптовалюта bitcoin продам bitcoin хардфорк bitcoin clouding депозит bitcoin trade cryptocurrency gadget bitcoin tether download monero pro обновление ethereum bitcoin electrum blacktrail bitcoin 100 bitcoin space bitcoin
bitcoin matrix monero алгоритм ethereum calculator
space bitcoin bitcoin department token bitcoin
live bitcoin cryptocurrency calendar
bitcoin office
bitcoin shops ethereum рост
wallet tether
bitcoin habrahabr кошелек ethereum
bitcoin get bitcoin conf bitcoin blocks monero fee bitcoin arbitrage bitcoin значок takara bitcoin bitcoin магазин bitcoin fan криптовалюту monero ютуб bitcoin компиляция bitcoin
ethereum заработок price bitcoin bitcoin game картинки bitcoin вклады bitcoin blockchain monero монета ethereum
вики bitcoin future bitcoin bitcoin apk
tether обменник
monero xmr bubble bitcoin ethereum бесплатно программа bitcoin short bitcoin money bitcoin anomayzer bitcoin bitcoin easy usb tether enterprise ethereum
bitcoin center кости bitcoin биржи monero x bitcoin cryptocurrency перевод ethereum decred платформу ethereum bitcoin клиент bitfenix bitcoin bitcoin alliance падение ethereum bitcoin вирус разработчик ethereum стоимость bitcoin