значение переменной codeHash

Об этом говорится в желтой книге Ethereum :

codeHash: Хэш кода EVM этой учетной записи — это код, который выполняется, если на этот адрес поступает вызов сообщения; оно неизменно и, таким образом, в отличие от всех других полей, не может быть изменено после построения. Все такие фрагменты кода содержатся в базе данных состояний под соответствующими им хэшами для последующего поиска. Этот хэш формально обозначается σ[a]c, и, таким образом, код может быть обозначен как b, учитывая, что KEC(b) = σ[a]c.

Однако позже в разделе «Создание контракта», описывающем сценарий развертывания контракта (то есть не внешний адрес):

Первоначально одноразовый номер учетной записи определяется как ноль, баланс — как переданное значение, хранилище — как пустое, а хэш кода — как 256-битный хэш Keccak пустой строки;

указывает, что codeHash устанавливается в хэш пустой строки после развертывания контракта.

Вопрос: что устанавливается в переменной codeHash после развертывания контракта? Мне кажется, что эти две цитаты противоречат друг другу, одна утверждает, что переменная codeHash содержит хэш кода контракта, другая — хэш пустой строки.

Вы уверены, что во втором утверждении речь идет не только о создании пустого контакта?
Я бы сказал, что это не говорит о пустом контракте, я делаю вывод из утверждения: «При создании учетной записи используется ряд внутренних параметров: отправитель (и), исходный транзактор (о), доступный газ (g), цена газа (p), запас (v) вместе с байтовым массивом произвольной длины, i, код инициализации EVM и, наконец, текущая глубина стека вызовов сообщений/созданий контрактов (e)».

Ответы (1)

Я считаю, что хэш пустой строки является хэшем кода только до тех пор, пока конструктор не вернет код тела.

Мне всегда трудно читать желтую бумагу, но если вы продолжите читать раздел «Создание контракта», вы увидите уравнение 98, которое показывает, что хэш кода сохраняется вместе с кодом, возвращаемым конструктором. Текст, который следует за этим уравнением:

Исключение в определении σ' диктует, что o, результирующая последовательность байтов от выполнения кода инициализации, указывает окончательный код тела для вновь созданной учетной записи.

Это имело бы смысл. И я думаю, что уравнение 98. указывает на это. Спасибо.