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.
ad bitcoin
bitcoin государство
bitcoin mainer bitcoin galaxy прогнозы bitcoin autobot bitcoin рулетка bitcoin дешевеет bitcoin monero fork bitcoin fasttech ethereum проекты bitcoin ферма bitcoin spinner alpari bitcoin
bitcoin shops moon ethereum ethereum android monero free bitcoin nvidia bitcoin bitcoin valet ethereum проект monero кошелек moneypolo bitcoin конференция bitcoin monero freebsd bitcoin проверка bitcoin вывод polkadot ico bitcoin реклама wei ethereum explorer ethereum cubits bitcoin bitcoin game bitcoin trojan bitcoin galaxy bitcoin reindex tx bitcoin настройка ethereum bitcoin tx jax bitcoin monero криптовалюта bitcoin freebitcoin доходность ethereum bitcoin индекс my ethereum bitcoin monkey bitcoin etherium ethereum видеокарты
up bitcoin system bitcoin ethereum node bitcoin инструкция ethereum calc monero hardware bitcoin зарабатывать box bitcoin bitcoin faucet bitcoin количество bitcoin rub
bitcoin investing flypool ethereum check bitcoin
ethereum cryptocurrency краны monero алгоритм bitcoin вики bitcoin
bitcoin stock moneypolo bitcoin bank bitcoin coinder bitcoin pump bitcoin bitcoin accelerator reklama bitcoin rpg bitcoin
bitcoin loan форумы bitcoin компиляция bitcoin bitcoin ротатор
токены ethereum bitcoin symbol ethereum прогнозы takara bitcoin bitcoin withdrawal системе bitcoin вывод ethereum amd bitcoin ethereum заработок цена ethereum bitcoin сокращение by bitcoin bitcoin kurs
erc20 ethereum ethereum os captcha bitcoin mastercard bitcoin bitcoin play криптовалюта monero bitcoin разделился green bitcoin monero краны tether программа bitcoin hype bitcoin расчет ethereum asic
bitcoin prominer bitcoin alliance bitcoin rotator сборщик bitcoin bitcoin mixer system bitcoin bitcoin анонимность nodes bitcoin bitcoin рублях wallets cryptocurrency bitcoin pizza стоимость ethereum bitcoin форки all bitcoin отзыв bitcoin эмиссия ethereum bitcoin программирование bitcoin виджет
habrahabr bitcoin bitcoin фото вывод monero mmm bitcoin doubler bitcoin bitcoin png bitcoin linux bitcoin зебра bitcoin strategy bitcoin qr bitcoin vector monero miner
Rigged votes is an illegal activity that occurs during most traditional voting systems. Also, citizens who want to vote to wait a little longer in a queue and cast their votes to a local authority, which is a very time-consuming process.tether usd Shareethereum перевод bitcoin masters bitcoin metal copay bitcoin bitcoin ads excel bitcoin баланс bitcoin ios bitcoin magic bitcoin
moto bitcoin tether usb bitcoin x2 india bitcoin hit bitcoin click bitcoin ethereum сайт bitcoin funding bitcoin playstation bitcoin store разделение ethereum bitcoin шахты cryptocurrency chart bitcoin часы bitcoin бот bitcoin motherboard вход bitcoin tether bitcointalk bitcoin stellar bitcoin ru форк bitcoin bitcoin hesaplama moto bitcoin siiz bitcoin 2016 bitcoin обменник ethereum tether limited Lee designed Litecoin based on the Bitcoin code and protocol, with some modifications that he believed addressed certain barriers to its wider adoption. Firstly, the block confirmation time is 4 times lower on Litecoin compared to Bitcoin (2.5 min vs. 10 min) which allows Litecoin to confirm transactions much faster. Another difference is the limit on the maximum amount of coins: for Bitcoin it is 21M, while for Litecoin – 84M. Finally, some technical elements of Litecoin make it less susceptible to centralization of mining operations and more attractive to smaller-scale miners.лото bitcoin bitcoin бесплатные total cryptocurrency bitcoin brokers check bitcoin
bitcoin брокеры сколько bitcoin bitcoin legal monero hardware space bitcoin bitcoin tails reindex bitcoin
mine bitcoin escrow bitcoin boxbit bitcoin
ethereum обозначение bitcoin значок виталик ethereum ethereum контракты
платформы ethereum bitcoin rotator контракты ethereum ethereum логотип wallets cryptocurrency
boxbit bitcoin price bitcoin
india bitcoin история ethereum bitcoin таблица
bitcoin 4 bitcoin конвектор tp tether кошелька ethereum
bitcoin talk neo cryptocurrency bitcoin weekend cryptocurrency price alpha bitcoin cryptocurrency это auction bitcoin *****a bitcoin bitcoin cache bitcoin mining alipay bitcoin технология bitcoin bitcoin основы panda bitcoin 2 bitcoin ethereum описание bitcoin лотереи bitcoin proxy
bitcoin обменник rpc bitcoin bitcoin adress bitcoin отзывы bitcoin capitalization
bitcoin презентация bitcoin matrix Bitcoin miners run complex computer rigs to solve complicated puzzles in an effort to confirm groups of transactions called blocks; upon success, these blocks are added to the blockchain record and the miners are rewarded with a small number of bitcoins.Bitcoin cashbest cryptocurrency bitcoin 5 bitcoin lurk bitcoin расчет x2 bitcoin
bitcoin бесплатные unconfirmed monero bitcoin fpga
bitcoin surf bitcoin bitcointalk rub bitcoin биржи bitcoin bitcoin описание cryptocurrency gold
bitcoin пулы analysis bitcoin ethereum доходность
capitalization bitcoin bitcoin пирамиды robot bitcoin home bitcoin bitcoin novosti ethereum icon de bitcoin bitcoin co bitcoin purse cfd bitcoin ethereum forks
bitcoin депозит bitcoin аналитика ethereum fork bitcoin видеокарты The major caveat, though, is that many developers are skeptical oracles can be used in a decentralized way. Users have to trust that the data feed is providing the correct data, and not gaming the data for their own financial interest.ethereum casper
truffle ethereum bitcoin 2018 monero bitcointalk bitcoin usa monero сложность ферма ethereum кошелек tether 22 bitcoin bitcoin earnings калькулятор ethereum протокол bitcoin вложить bitcoin вебмани bitcoin cryptocurrency gold ethereum mining EXPANDсимвол bitcoin разработчик bitcoin сервисы bitcoin новости ethereum bitcoin сокращение bitcoin конвертер Before we can understand cold storage, we must first explore the concept of a bitcoin wallet. For the cryptocurrency user, wallets function in a somewhat similar way to physical wallets which hold cash. They can be thought of as a storage device for cryptocurrency tokens. However, in most cases wallets are not physical items, and neither are the bitcoin they hold. Rather, they are digital storage tools which have both a public key and a private key. These keys are strings of cryptographic characters which are necessary in order to complete transfers of bitcoin to or from the wallet in question. The public key, analogous to a username, identifies the wallet so that other parties know where to transfer coins during a transaction. The private key, similar to a password, is the wallet's owner's special access code and acts as a security device to help ensure others cannot access the bitcoin stored within.red bitcoin 600 bitcoin форки ethereum master bitcoin казино bitcoin сложность ethereum hd7850 monero bitcoin group bitcoin кэш connect bitcoin транзакции monero vip bitcoin
вывод monero cryptocurrency bitcoin all bitcoin 4 email bitcoin bitcoin dollar
r bitcoin bitcoin вирус nanopool ethereum bitcoin рубли bitcoin marketplace seed bitcoin bitcoin motherboard bitcoin strategy blocks bitcoin казино ethereum bitcoin now ethereum tokens plasma ethereum bitcoin мошенничество hacking bitcoin pow bitcoin bitcoin 2048
buy tether основатель bitcoin ethereum course оборот bitcoin
bitcoin update The institutions of the day, corporations and governments, Mumford called megamachines. Megamachines, he said, are comprised of many human beings, each with a specialized role in a larger bureaucracy. He called these individuals 'servo units.' Mumford argued that for these people, the specialized nature of the work weakened psychological barriers against questionable commands from leadership, because each individual was responsible for only one small aspect of the machine’s overall goal. At the top of a megamachine sat a corporate scion, dictator, or commander to whom god-like attributes were attributed. He cited the lionization of Egyptian Pharaohs and Soviet dictators as examples.Coinmap suggests that some 75 businesses in New York City currently accept bitcoin payments. Some of these work exclusively with bitcoin, even going so far as to house their own bitcoin ATMs.4bitcoin pizza ethereum os