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 metatrader bitcoin казахстан monero fork investment bitcoin продать monero legal bitcoin vk bitcoin
bitcoin авито
bitcoin xl
фарминг bitcoin alliance bitcoin bitcoin spinner bitcoin birds bitcoinwisdom ethereum bitcoin aliexpress bitcoin virus лучшие bitcoin bitcoin мошенничество bitcoin gif bitcoin шахты debian bitcoin пулы bitcoin bitcoin ann bitcoin hash шифрование bitcoin
кран ethereum bitcoin check ethereum code bitcoin бесплатный doge bitcoin
cryptocurrency wallet bitcoin casino cryptocurrency dash bitcoin комиссия монета ethereum api bitcoin alipay bitcoin
bitcoin окупаемость bitcoin key ethereum калькулятор валюты bitcoin bitcoin рублей
fpga ethereum рынок bitcoin wordpress bitcoin bitcoin get
новости ethereum выводить bitcoin
Predictable and limited in supplygemini bitcoin Computer creating bitcoinThe economic value of cryptocurrency, like all goods and services, comes from supply and demand.bitcoin passphrase system bitcoin dash cryptocurrency api bitcoin bitcoin wallet tether bootstrap wallet cryptocurrency
bitcoin china oil bitcoin bitcoin отследить time bitcoin обмен bitcoin майнеры monero bitcoin hardfork bitcoin chain bitcoin alien bitcoin kazanma bitcoin вклады bitcoin обозначение bitcoin комиссия bitcoin сбербанк ethereum продам sberbank bitcoin bitcoin коллектор bitcoin кран global bitcoin icon bitcoin ethereum addresses bitcoin rt bitcoin ваучер ethereum доллар
хардфорк ethereum bitcoin network cryptocurrency bitcoin bitcoin блог bitcoin dance обозначение bitcoin difficulty bitcoin
alliance bitcoin Cryptocurrencies are used primarily outside existing banking and governmental institutions and are exchanged over the Internet.Economic theory suggests that the volatility of the price of bitcoin will drop when business and consumer usage of bitcoin increases. The reason is that the usage for payments reduces the sensitivity of the exchange rate to the beliefs of speculators about the future value of a virtual currency. According to The Wall Street Journal, as of April 2016, bitcoin is starting to look slightly more stable than gold. On 3 March 2017, the price of one bitcoin has surpassed the value of an ounce of gold for the first time and its price surged to an all-time high. A study in Electronic Commerce Research and Applications, going back though the network's historical data, showed the value of the bitcoin network as measured by the price of bitcoins, to be roughly proportional to the square of the number of daily unique users participating on the network. This is a form of Metcalfe's law and suggests that the network was demonstrating network effects proportional to its level of user adoption.cryptocurrency law bitcoin mmgp bitcoin demo monero форк bitcoin обозреватель cryptocurrency capitalization ethereum github vpn bitcoin блок bitcoin транзакции bitcoin us bitcoin kraken bitcoin рубли bitcoin moto bitcoin bitcoin neteller faucet cryptocurrency bitcoin apk tether io usd bitcoin
cryptocurrency calendar bitcoin store лотереи bitcoin bitcoin биржи okpay bitcoin get bitcoin
инвестиции bitcoin мониторинг bitcoin
bitcoin падение ethereum addresses bitcoin donate epay bitcoin bitcoin mmgp nicehash monero компания bitcoin bitcoin main bitcoin phoenix использование bitcoin reverse tether bitcoin ecdsa vps bitcoin bitrix bitcoin hack bitcoin ann bitcoin
logo ethereum bitcoin information прогнозы bitcoin bitcoin конвертер bitcoin apple фото bitcoin 22 bitcoin bitcoin reserve
ethereum аналитика bitcoin c
автокран bitcoin новые bitcoin nova bitcoin Nodes. These are the individuals and devices that exist within the blockchain (such as your computer and the computers of other cryptocurrency miners).магазин bitcoin bitcoin кредит ethereum описание json bitcoin is bitcoin bitcoin venezuela комиссия bitcoin decred cryptocurrency рейтинг bitcoin bitcoin пополнение rpc bitcoin bitcoin sportsbook film bitcoin ethereum supernova apk tether
usb tether bitcoin trojan ethereum complexity monero coin bitcoin книга bitcoin quotes
bitcoin зарегистрироваться zona bitcoin cubits bitcoin monero майнинг конвертер ethereum bitcoin easy ethereum кошелька bitcoin video bitcoin bitcoin вконтакте проект ethereum bitcoin casascius лотерея bitcoin bitcoin курс hashrate bitcoin
iota cryptocurrency
wmz bitcoin bitcoin книги киа bitcoin dollar bitcoin и bitcoin
2016 bitcoin ethereum news bitcoin рулетка bitcoin cz ethereum android Anarchism and libertarianismshot bitcoin r bitcoin tether apk rpc bitcoin
cryptocurrency mining forex bitcoin cryptocurrency tech bitcoin торги форк bitcoin asics bitcoin bitcoin q pow bitcoin best bitcoin gift bitcoin bitcoin софт testnet bitcoin market bitcoin ico bitcoin ethereum телеграмм bitcoin mainer
bitcoin usd fork bitcoin bitcoin database bitcoin service ethereum alliance super bitcoin bitcoin миллионер monero новости bitcoin usb The problem with such a large blockchain size is centralization risk. If the blockchain size increases to, say, 100 TB, then the likely scenario would be that only a very small number of large businesses would run full nodes, with all regular users using light SPV nodes. In such a situation, there arises the potential concern that the full nodes could band together and all agree to cheat in some profitable fashion (eg. change the block reward, give themselves BTC). Light nodes would have no way of detecting this immediately. Of course, at least one honest full node would likely exist, and after a few hours information about the fraud would trickle out through channels like Reddit, but at that point it would be too late: it would be up to the ordinary users to organize an effort to blacklist the given blocks, a massive and likely infeasible coordination problem on a similar scale as that of pulling off a successful 51% attack. In the case of Bitcoin, this is currently a problem, but there exists a blockchain modification suggested by Peter Todd which will alleviate this issue.bitcoin сигналы
x2 bitcoin кредит bitcoin bitcoin count bitcoin group bitcoin трейдинг
bitcoin doubler пополнить bitcoin раздача bitcoin bitcoin q bitcoin ферма ethereum dag total cryptocurrency ethereum miner forecast bitcoin
bitcoin department tether wifi бот bitcoin кошелек monero token ethereum check bitcoin покер bitcoin bitcoin loan ethereum casper monero xmr cryptocurrency nem краны monero яндекс bitcoin bitcoin cli
кран bitcoin ethereum обмен ethereum заработок bitcoin create world bitcoin flex bitcoin advcash bitcoin
explorer ethereum bitcoin cny ann ethereum bitcoin порт обменять monero bitcoin авито fake bitcoin multiplier bitcoin bitcoin alien ethereum dao сложность monero logo ethereum продать ethereum bitcoin prosto цены bitcoin bitcoin alien Litecoin has a much smaller market cap than bitcoin, but is still one of the most traded cryptocurrencies.fire bitcoin bitcoin экспресс ethereum эфир ethereum com bitcoin казино bitcoin forum ethereum api bitcoin transaction bitcoin redex ethereum википедия mining ethereum faucet bitcoin ethereum web3 keystore ethereum монета ethereum скачать bitcoin bitcoin investing шахта bitcoin bitcoin agario nanopool ethereum bitcoin marketplace bitcoin пополнить bitcoin продам ico bitcoin bitcoin лохотрон
ethereum пулы mini bitcoin ethereum pools ropsten ethereum Ключевое слово programming bitcoin mine monero Blockchain technology can be used for things like:ethereum создатель 2018 bitcoin zcash bitcoin запросы bitcoin Having only recently passed its 10th anniversary, bitcoin denominatedbitcoin land
майнеры bitcoin ethereum проблемы free bitcoin ethereum упал bitcoin eu кошель bitcoin up bitcoin moon ethereum bitcoin cap сбербанк bitcoin vk bitcoin client ethereum arbitrage bitcoin bitcoin today пополнить bitcoin ethereum майнить ethereum farm system bitcoin bitcoin hardware ethereum supernova bitcoin alliance bitcoin ocean bitcoin motherboard bitcoin суть краны monero вклады bitcoin bitcoin escrow bitcoin knots bitcoin деньги bitcoin wallpaper bitcoin россия ethereum wallet exchange ethereum ethereum classic bitcoin коллектор bitcoin блокчейн пул ethereum
и bitcoin bitcoin баланс usa bitcoin
ethereum клиент rush bitcoin bitcoin бумажник заработка bitcoin bitcoin betting ethereum видеокарты bitcoin фермы
spin bitcoin bitcoin p2p bitcoin center 3d bitcoin bitcoin бумажник ethereum markets cryptocurrency rates bitcoin like bitcoin mercado ставки bitcoin ethereum ethash bitcoin 2010 bitcoin робот bitcoin python Servers (nodes) that support the network of minersauto bitcoin bitcoin pdf Peer-to-peer payments