Каждый узел выполняет код контракта для каждой транзакции?

Этот вопрос задавали Reddit некоторое время назад:

  

Когда узел отправляет транзакцию в сеть и имеет приемник в качестве контракта, каждый узел выполняет байт-код контракта с входами для подтверждения хэша? Или первый узел, получающий транзакцию, выполняет и создает хеш транзакции, который затем распределяется и используется для достижения консенсуса. В принципе, код контракта выполняется один или несколько раз для каждой транзакции? Я предполагаю, что это первый, если каждый узел работает с EVM.    â € " Reddit: основные вопросы об EVE и состоянии хранения Ethereum к югу>

21 голос | спросил Joris Bontje 22 Jam1000000amFri, 22 Jan 2016 10:18:22 +030016 2016, 10:18:22

4 ответа


17

Да, ответ вполне логичен. Каждый узел должен проверять результаты транзакции, которая вызывает интеллектуальный контракт. Результатом является то, что по крайней мере каждый полный узел выполнит код.

  

Хеш транзакции не имеет значения до тех пор, пока он не будет забит в дерево merkle. При выполнении исполнения все, о чем мы заботимся, это количество газа, передаваемые данные и код контракта, который вызывается. Когда выполнение завершено, дерево хранения контракта может быть обновлено, поэтому мы перекомпилируем хэш херкеля этого дерева (и любой другой контракт, который может быть вызван этим!)

Источник .

ответил Afri 22 Jam1000000amFri, 22 Jan 2016 10:26:56 +030016 2016, 10:26:56
7

Каждый полный узел обрабатывает каждую транзакцию. Шахтеры выбирают, какие транзакции выполнять, исходя из цены на газ. После того, как блок заминирован, каждый узел должен повторить все исполнения контракта, чтобы проверить блок.

ответил Tjaden Hess 2 FebruaryEurope/MoscowbTue, 02 Feb 2016 08:40:39 +0300000000amTue, 02 Feb 2016 08:40:39 +030016 2016, 08:40:39
6

Да, каждый (полный) узел выполняет код контракта для каждой транзакции.

Поскольку выполнение кода контракта относительно дорого, узлы делают это только тогда, когда это необходимо. Когда узел получает транзакцию, сначала выполняется только несколько основных проверок, например:

  • является ли сигнатура действительной?
  • У получающей учетной записи достаточно эфира для оплаты газа?
  • - газ ниже предела газового газа?

Если основные проверки проходят, узел передает транзакцию. Горные узлы затем выполняют относительно дорогостоящую работу по выполнению транзакции, включают ее в блок и собирают комиссию за транзакцию. Когда (полный) узел получает блок, он затем выполняет транзакции в блоке, чтобы независимо проверять безопасность и целостность цепочки блоков, которые он создает.

ответил eth 8 PM00000030000001931 2016, 15:22:19
5

В текущей версии каждый узел запускает каждый контракт. Поскольку это не масштабируемо, весьма вероятно, что будет реализован «осколок», где некоторые состояния находятся только на определенных узлах. Затем они будут доступны по мере необходимости асинхронно. Это то, что Vitalik в настоящее время работает над

ответил zunior 7 FebruaryEurope/MoscowbSun, 07 Feb 2016 03:34:14 +0300000000amSun, 07 Feb 2016 03:34:14 +030016 2016, 03:34:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132