Эфириум квитанций блокирует и хэши - PullRequest
0 голосов
/ 09 мая 2019

Предисловие: Вопрос касается связи между содержимым квитанций Эфириума и хешем заголовка блока.

Описание проблемы: Интересно, в Ethereum blockid основан на хэше блока. Заголовок содержит хэш корня квитанции Trie. Квитанция содержит идентификатор блока.

Но прежде чем поместить идентификатор блока в квитанцию, нужно знать хеш самого блока (который содержит хеш Trieipts Trie) - другими словами, у нас есть циклическая зависимость.

Теперь я вижу 4 варианта:

1) Блок содержит квитанции транзакций, которые содержатся внутри блока; если нет, то это было бы легко; квитанции будут храниться в последовательных блоках; но это усложнит вещи; поскольку для других узлов должен быть стимул включать внешние поступления, распределять их и т. д.

2) Хеш Trie квитанции квитанции не учитывает поле blockID в квитанциях. Это может привести к изменчивости некоторых данных (не защищенных PoW).

3) BlockID не основан на значении хеша всего заголовка. Таким образом, не принимая во внимание хэш Receipts Trie. (опять-таки с учетом податливости для некоторых данных)

4) Нет идентификатора блока внутри квитанции; но потом я увидел, что они включены в некоторые распечатки JSON, доступные здесь. эти значения добавляются интерфейсом обработки команд неявным образом?

Какая, или, может быть, другая возможность?

1 Ответ

0 голосов
/ 09 мая 2019

Из желтая бумага , раздел 4.3.1:

Квитанция R, представляющая собой транзакцию, представляет собой кортеж из четырех элементов, включающий: совокупный газ, используемый в блоке, содержащемпоступление транзакции сразу после ее совершения, Ru, набор журналов, созданных в результате выполнения транзакции, R1 и фильтр Блума, составленный из информации в этих журналах, Rb и код состояния транзакции, Rz:

(20) R ≡ (Ru, Rb, Rl, Rz)

Таким образом, в самой квитанции о транзакции не указываются какие-либо сведения о блоке, частью которого он является.

...