У меня есть несколько проблем с пониманием этапа выполнения транзакции в смарт-контракте.
1-Когда пользователь отправляет транзакцию в смарт-контракт, этот смарт-контракт не выполняется немедленно, а объединяется в пул транзакций.
2- В какой-то момент времени для каждой EVM выбирается транзакция для выполнения кода в смарт-контракте построчно.
3-Если все EVMS найдут одинаковый результат, что произойдет после? В противном случае смарт-контракт отменил эту транзакцию.
что происходит после? ==> 4- майнер соберет все транзакции из пула транзакций и добавит их во вновь созданный блок, а затем начнется процесс майнинга между майнерами (исправьте меня, если я ошибаюсь, пожалуйста, в шагах)
5-наконец, блокчейн переходит в новое состояние.
*Как майнер проверяет, правильно ли эти транзакции выполняются EVM?
*Играет ли EVM роль только в первой части исполнения смарт-контракта?
*Кто изменит состояние при исполнении контракта? (сделка?)
Вы неправильно поняли шаги. Но близко!
Консенсус легко понять неправильно.
Фундаментальная проблема, впервые решенная Биткойном, заключалась в том, как достичь окончательного консенсуса между узлами, которые не знают или не обязательно доверяют друг другу. Добавьте деньги в окружающую среду, и она станет враждебной средой. Это совсем не похоже на ситуацию в типичном кластере компьютеров, которые знают друг друга и доверяют друг другу.
Мы получаем подсказку о том, как ее решить, из журналов транзакций, используемых базами данных. Если у вас есть воспроизводимый журнал со всеми входными данными в правильном порядке, то можно восстановить базу данных. Не важно иметь «состояние», если у вас есть входные данные, которые создали это состояние.
Есть неочевидная проблема, с которой нужно справиться. Учитывая физику, все узлы не могут узнать обо всех транзакциях одновременно или даже в одном и том же порядке. (Возможно) никогда не будет возможно сделать все так же быстро или быстрее, чем все остальное.
В доверительной среде это можно было бы решить с помощью точных, заслуживающих доверия временных меток, которые помогли бы каждому перечислить «правильный» порядок транзакций. Во враждебной среде без авторитета это не работает, потому что ничьим часам нельзя доверять больше, чем чьим-либо еще.
Итак, как упорядочить транзакции?
Процесс майнинга разрушает эту двусмысленность. «Победивший» майнер получает привилегию установить фактический порядок сетевых транзакций для одного блока. Важно отметить, что это даже не попытка решить временной порядок транзакций. По сути, gasPrice — это способ перехода в очередь. Вероятно , можно побудить майнера включить транзакцию раньше, установив высокую ставку. И наоборот, проявив терпение, можно сэкономить на комиссиях за транзакции.
Нигде ничего не происходит, пока узлы не получат новости о транзакциях, включенных в блоки. Транзакции в блоках хорошо упорядочены. Сами блоки хорошо упорядочены. Итак, цепочка блоков — это упорядоченный набор всех произошедших транзакций .
Каждый полный узел, а не только майнеры, полностью обрабатывает транзакции, делая собственные выводы об изменении состояния. Это очень похоже на воспроизведение журнала транзакций, потому что все согласны с входными данными и порядком этих входных данных. Функции детерминированы (строгие требования), поэтому не может быть разногласий между хорошо функционирующими узлами на одной и той же высоте блока.
Блоки имеют временные метки, а транзакции — нет. Время блока — это минимальное разрешение, и все, что можно сказать, это то, что все транзакции в блоке были добыты в это время блока в порядке включения. Каждая транзакция выполняется в контексте, оставленном предыдущей транзакцией.
У майнеров есть нетривиальная привилегия. Работая вместе, они могут подвергать цензуре транзакции. Они могут играть с временными метками и порядком транзакций, если в этом есть корыстная выгода. Это может быть важно при разработке контракта, когда существуют такие факторы, как «крайний срок».
В любом случае консенсус определяет порядок транзакций. Узлы сами определяют состояние.
Надеюсь, поможет.
PS В майнинге происходит гораздо больше, но я хотел бы сосредоточиться на вашем вопросе.
Амира
Роб Хитченс
Each node of the network, not only miners execute the smart contracts.
EVM находится в каждом узле, и узлы образуют рой. Это может помочь увидеть его: bitrates.com/guides/ethereum/…Амира
Роб Хитченс
and includes result of transaction in block to mine
- полностью искажено. Это не «включает в себя результат». Он включает в себя транзакцию... точнее, он включает в себя входные данные (от Алисы, Бобу, сумму, данные... подпись), а не результат. Этого нет в блоке "майнить". Работа шахтера заключается в том, чтобы «добывать». Майнер включает входные данные транзакции в транзакцию, которая «была добыта». Да, майнер запускает транзакцию. Это связано с тем, что все узлы выполняют транзакцию, а «все узлы» включают майнер.Роб Хитченс
Амира
all nodes run the transaction and "all nodes" includes the miner
?Амира
Роб Хитченс
Боки XD
and includes result of the transaction in block to mine
неправильно. На самом деле, при вычислении транзакции результаты сохраняются в Receipt Trie майнера/валидатора, корень которого включен в заголовок блока, который собирает текущий валидатор/майнер, а это означает, что результат транзакции действительно в некотором смысле «включен» в блок (в данном случае блок майнера/валидатора принимается). Возможно, я вас неправильно понял, но буду признателен за ответ!Роб Хитченс
Боки XD