Как транзакции узнают, как вести себя на основе блока генезиса?

Скажем, я майнер, и мой блок генезиса в основной сети имеет конфигурацию X. Мне приходит транзакция для майнинга. Как мой клиент Ethereum подтверждает, что транзакция соответствует всем стандартам, установленным в моем генезис-блоке?

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

Ответы (2)

сначала вы не майните транзакцию, а блоки, которые являются блоками транзакций.

Из вашего вопроса я полагаю, что существует путаница в отношении трех разных понятий:

  1. поведение сети: оно инициализируется в блоке Genesis.
  2. создание нового блока (через доказательство работы, доказательство полномочий, доказательство стека), обычно просто называемое майнингом. Текущее доказательство работы Эфириума описано здесь https://github.com/ethereum/wiki/wiki/Ethash.
  3. алгоритм консенсуса, который заключается в том, чтобы принять (или не принять) недавно добытый блок, транслируемый по сети. Каждый узел участвует в консенсусе, хотя не каждый узел занимается майнингом.

Блок Genesis определяет правила для инициализации самой сети. Например, глядя на

https://github.com/ethereum/go-ethereum/wiki/Частная сеть

мы видим следующие параметры:

  • GasLimit (максимальное количество газа, используемого в блоке)
  • сложность (сложный майнинг для обеспечения более или менее постоянного периода добычи новых блоков)

и вот как клиент geth анализирует и знает об этих параметрах: https://github.com/ethereum/go-ethereum/blob/master/params/config.go

У меня есть полное понимание всего в вашем ответе, кроме самого последнего предложения, о котором мой вопрос. Майнеры получают транзакции вместо блоков и превращают эти транзакции в блоки. Как конкретно проверяется совместимость самой транзакции с блоком генезиса консенсуса?
@Aditya Aditya, вы говорите, что сама транзакция будет выглядеть по-другому, если файл генезиса будет другим?
Нет, блок будет выглядеть иначе.

Генезисные блоки отправителя и майнера не обязательно должны быть идентичными сами по себе , пока транзакция действительна, адрес имеет достаточно эфира, одноразовый номер на единицу больше, чем у последней исходящей транзакции, совпадает chainId и достаточно газа. выделено для исполнения.

Если транзакция не соответствует правилам одного генезисного блока, а не другого, она будет работать. Сама транзакция не ссылается на блок генезиса. Причина для chainId и nonce состоит в том, чтобы воспрепятствовать злонамеренному использованию подобных ситуаций в атаках воспроизведения. Однако, если вы в состоянии скоординировать все эти переменные, чтобы они совпадали, вы не являетесь злоумышленником и ничего не выигрываете.

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