Как Ethereum проверяет существование учетной записи, если эта учетная запись не содержит никаких транзакций?

https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ :

Это позволяет использовать очень продвинутый протокол легкого клиента, который позволяет легким клиентам легко создавать и получать проверяемые ответы на многие виды запросов: ... Существует ли эта учетная запись?

Обрабатывается деревом состояний, но способ его вычисления более сложен. Здесь нам нужно построить то, что можно назвать доказательством перехода состояния Меркла. По сути, это доказательство, подтверждающее утверждение «если вы запустите транзакцию T в состоянии с корнем S, результатом будет состояние с корнем S', с журналом L и выводом O».

Когда мы начинаем использовать gethили parityмы можем создать неограниченное количество учетных записей, каждая из которых имеет уникальный адрес, например: ' 0xe427c111f968fe4ff6593a37454fdd9abf07c490'. Насколько я понимаю, если по этому адресу нет транзакции, она не будет отображаться в дереве состояний.

[В] Если учетная запись не выполняла никаких транзакций, теперь она будет отображаться в дереве состояний. Так как же Ethereum мог знать, что эта учетная запись действительно существует, которая теперь имеет какой-либо след в дереве состояний?

[В] В дополнение к этому: следовательно, каждый пользователь может создавать неограниченное количество учетных записей. Если пользователь создает миллиарды учетных записей, и каждая из них будет осуществлять непрерывную транзакцию между собой. Вся ли информация об учетной записи будет храниться в Мировом Государстве? Если да, это может потреблять много памяти в долгосрочной перспективе.

Спасибо за ваше драгоценное время и помощь.

Ответы (1)

Что касается Q1, вы правы в том, что простое «создание» учетной записи в клиенте не приводит к ее отслеживанию как части состояния блокчейна. Все, что вы сделали, это взяли закрытый ключ и сгенерировали для него адрес — это полностью в автономном режиме и не требует никакого взаимодействия с блокчейном. В этом смысле все учетные записи уже существуют, но блокчейн отслеживает только те учетные записи, для которых есть хотя бы одна входящая транзакция (и которые не были самоуничтожены). Если в учетной записи нет транзакций, блокчейну не нужно «знать» об этом; когда вы совершаете первую транзакцию в этой учетной записи, она добавляется в состояние блокчейна.

Насчет Q2 в принципе вы правы. На практике, чтобы заставить блокчейн добавить учетную запись в состояние, нужно отправить на него транзакцию. Это стоит немного газа, в идеале достаточно газа, чтобы никто не мог спамить. Однако так было не всегда. В конце лета 2016 года злоумышленник воспользовался дешевым способом создания учетных записей и действительно заспамил блокчейн «раздуванием состояния». Позже эти спам-аккаунты были удалены из состояния блокчейна, а стоимость газа для создания аккаунтов была переоценена, чтобы воспрепятствовать подобным вещам в будущем.

См. EIP-150 для переоценки кода операции, чтобы предотвратить это. Вот подробное объяснение того, как проводились атаки с раздуванием состояния. Некоторое обсуждение вопроса и зачистка от Виталика.