Ethereum blockchain: что это, размер, где хранится

23 августа 2018 / 23:49
Схематическое изображение блокчейна EthereumЧто такое блокчейн для Эфириума — ключевые характеристики сети, размер базы данных, принцип самостоятельного создания blockchain на Ethereum.
Содержание статьи:

  1. Ethereum blockchain: что это простыми словами
  2. Адреса Эфириум блокчейна: как взаимодействуют аккаунты внутри площадки

  3. Экосистема платформы: где хранится блокчейн Ethereum
  4. Как создать свой blockchain на Ethereum: подробная инструкция

Сегодня многие люди имеют лишь общие представления о том, что такое блокчейн Эфириум и как он работает. Но на самом деле эта платформа наделена рядом особенностей, выделяющих её среди других платежных систем. В этом обзоре мы рассмотрим все ключевые характеристики сети Ethereum и даже узнаем, как создавать приватный блокчейн с нуля.

Ethereum blockchain: что это простыми словами



Графическое изображение блоков транзакций в блокчейне Эфириума

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

Внутри системы ходит одноименная криптовалюта Эфириум или Эфир. Работа сети базируется на 3-х фундаментальных принципах:

  1. Наличие криптографической защиты — это значит, что внутренняя валюта создается на основе сложных математических алгоритмов, которые крайне трудно взломать.

  2. Одноэлементный механизм записи транзакций. То есть, система содержит лишь один правильный алгоритм, отвечающий за проведение транзакций. Этот цифровой механизм можно назвать единой истиной, принимаемой всеми пользователями площадки. Чтобы не допускать появления новых механизмов внутри платформы, применяется протокол GHOST. Согласно этому протоколу, каноничным считается тот алгоритм, который требует наибольшего количества вычислений.

  3. Открытое состояние механизма — это значит, что сетью могут пользоваться все её участники в любой момент времени.

Механизм блокчейна Эфириума систематически анализирует входящие сведения и, опираясь на них, изменяет свое состояние. Стартовой точкой для рассматриваемой системы является так называемое «состояние генезиса». Это начальный статус платформы до осуществления каких-либо денежных переводов. После проведения транзакций осуществляется переход сети в фазу нового конечного состояния, которое будет текущим состоянием блокчейна на конкретный момент времени.

На сегодняшний день блокчейн для Эфириума состоит из тысяч транзакций, сгруппированных в блоки. Каждый новый элемент сети связан с предыдущим, за счет чего формируется цепочка. Любой блок имеет свой номер; они все идут в строгой последовательности. Несмотря на то, что данные сети являются открытыми, их нельзя менять или что-то удалять из базы.

Как было сказано чуть выше, весь жизненный цикл Ethereum blockchain основан на постоянном изменении состояния. Чтобы такие изменения проводились, в системе должны присутствовать действительные транзакции. Переводы получают статус действительных после прохождения валидации, являющейся частью майнинга. Майнинг в сети Эфира — это процесс создания новых блоков транзакций, который выполняется за счет вычислительных мощностей сотен компьютеров (или узлов).

По сути, каждый майнер претендует на формирование и проверку нового элемента блокчейна. Тысячи пользователей во всем мире безостановочно генерируют и утверждают блоки. При записи нового элемента blockchain каждый майнер даёт математическое доказательство того, что блок сформирован и включает в себя только действительные переводы. Этот алгоритм получил название Proof-of-Work (то есть доказательство выполненной работы). За каждый подтвержденный блок «шахтеры» получают вознаграждение в виде определенного количества монет Эфириума.

Поскольку сегодня для формирования новых элементов сети требуются колоссальные мощности, пользователи практически не майнят поодиночке. Они объединяются в пулы и совместно работают над формированием одного блока. После создания нового компонента награда распределяется между всеми участниками процесса. Её размер напрямую зависит от вклада конкретного пользователя в создание блока.

По состоянию на 21.08.2018 блокчейн Эфира имеет такие ключевые показатели:

  1. Общий хешрейт сети — 282.395 Thash/s.

  2. Среднее время, которое тратится на генерацию блока — 14,5 сек (это примерно в 10 раз быстрее, чем в сети Биткоин).

  3. Суммарное количество блоков — 6 186 719.

  4. Размер одного элемента сети — 25,134 Кб.

  5. Размер блокчейна Ethereum — 667,10 Гб.

  6. Среднее количество блоков, генерируемое за сутки — 5 945.

  7. Награда за блок — 3 ETH.

Опираясь на вышеизложенную информацию, можно прийти к выводу, что размер блокчейна Эфириума ежедневно увеличивается на 148,6 Мб. Таким образом, за год база данных сети «потяжелеет» примерно на 54 Гб. Этот факт стоит учитывать тем, кто хочет завести себе полновесный кошелек для хранения Эфира.

Адреса Эфириум блокчейна: как взаимодействуют аккаунты внутри площадки



Графическое изображение счета внешнего владельца и счета контракта в сети Эфириум

Помимо блоков транзакций, сеть Эфириума содержит в себе множество крохотных объектов, способных взаимодействовать друг с другом, обмениваясь сообщениями. Эти объекты называются счетами. Каждый конкретный счет имеет определенное состояние, а также 20-битный адрес. Адрес же является 160-битным идентификатором, применяемым для выявления того или иного счета.

Все профили блокчейна Эфириума разделены на 2 категории:

  1. Счета внешних владельцев, управление которыми осуществляется с помощью приватных ключей. Объекты, относящиеся к данной категории, не имеют уникального программного кода.

  2. Счета контрактов, которые управляются не ключом, а ассоциированным программным кодом.

Крайне важно понимать, в чем заключается отличие между двумя этими видами объектов. Со счетов внешних владельцев можно отправлять сообщения как на другие внешние адреса, так и на адреса контрактов. В первом случае будет проводиться обычный денежный перевод. Во втором случае (отправка на счет контракта) активируется особый программный код, позволяющий контракту выполнять заданные действия. В коде может быть заложена практически любая функция: от трансфера монет до проведения математических вычислений.

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

При работе на рассматриваемой платформе очень важно уметь анализировать состояние счета. Об этом мы поговорим далее.

Из чего состоит счет в системе Эфириум?



Элементы счёта внешнего владельца и счёта контракта в блокчейне Эфира

Состояние счета в блокчейне Эфира всегда включает 4 элемента:

  1. Nonce. В случае со счетами внешних владельцев это количество переводов, осуществленных с конкретного аккаунта. Во втором случае данная графа указывает численность контрактов, созданных тем или иным профилем.

  2. Balance — показывает, сколько wei (наименьшая единица Эфира) есть на счету аккаунта.

  3. StorageRoot — хеш корневого узла дерева Меркла (о нём мы расскажем чуть позже). Данное дерево проводит кодировку информации, содержащейся в хранилище конкретного счета.

  4. CodeHash — особый код цифровой машины Ethereum. В случае с контрактами данный код сохраняется непосредственно как CodeHash. Если говорить о счетах внешних владельцев, то поле CodeHash представляет собой хеш пустой строчки.


Экосистема платформы: где хранится блокчейн Ethereum



Распределение хеша в блокчейне Эфириума

Выше мы упоминали такое понятие, как дерево Меркла. Так вот, это двоичная иерархическая структура данных, в которой хранятся все сопоставления адресов и счетов. Дерево Меркла включает 3 вида узлов (или нод):

  1. Конечные узлы — находятся внизу иерархической структуры. В них содержатся базовые сведения.

  2. Промежуточные ноды, каждый из которых — это хеш двух его дочерних узлов.

  3. Корневой узел — это вершина дерева Меркла. Формируется данный нод из хеша двух подчиненных ему узлов.

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

  1. Сведения, подлежащие сохранению, разделяются на блоки.
  2. Сформированные блоки, в свою очередь, разделяются на сегменты.
  3. Система берёт хеш каждого сегмента, и операция повторяется.
  4. Система собирает хеш сегментов до того момента, пока не останется лишь корневой хеш.

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

В системе Ethereum ключ показывается между адресами и относящимися к ним счетами. Эти ключи мы уже упоминали ранее: Nonce, Balance, StorageRoot, CodeHash. Помимо этого, в двоичном дереве Меркла хранятся транзакции и квитанции. Если говорить точнее, то в каждом блоке присутствует свой заголовок, в котором располагается корневой хеш древа состояний, переводов и квитанций (то есть, мы имеем 3 разные структуры в одном блоке).

Использование деревьев Меркла для хранения информации в сети Эфириум крайне полезно и практично. Дело в том, что функционирование платформы обеспечивают сотни отдельных узлов (или нод). Эти ноды делятся на 2 группы: полные и легкие. Полные архивные узлы загружают весь блокчейн Эфириума, содержащий подробную информацию по каждой отдельной транзакции. Зачастую, полными нодами являются майнеры, генерирующие новые блоки и гарантирующие работу площадки. Однако вся база данных Ethereum весит крайне много (667,10 Гб). Более того, она безостановочно расширяется, что может доставить пользователю проблемы в будущем.

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

Нельзя не упомянуть и о том, что принцип работы дерева Меркла оберегает блоки от внедрения поддельных транзакций. Дело в том, что хеширование в иерархической структуре распространяется вверх. Если злоумышленник внесет изменения в узел, находящийся внизу, он спровоцирует цепную реакцию. Сначала изменится хеш первого нода, находящегося выше, потом хеш узла, расположенного ещё выше. В итоге поменяется хеш корневого узла, что недопустимо. Проверяя всю цепочку хеширования, можно выявить, какой элемент дерева имеет некорректное расположение в иерархической структуре.

Как создать свой blockchain на Ethereum: подробная инструкция



Светящийся значок Эфириума

Поняв принцип работы системы Эфириума, можно создать свой приватный блокчейн для локальной сети. Далее мы узнаем, как это делается.

Прежде всего, необходимо скачать клиент под названием Geth. Этот клиент является одним из вариантов реализации протокола Ethereum. Это лицензированное приложение, так что никаких проблем с ним не будет. Geth можно загрузить в качестве отдельной программы или в виде библиотеки для интеграции в проекты на Android либо iOS.

Установочный файл можно скачать, перейдя по ссылке ethereum.github.io/go-ethereum/downloads/. Там будут версии для Windows, MacOS и Linux. Инсталляция клиента на Windows проходит стандартно. Чтобы поставить Geth на MacOS, необходимо использовать менеджер пакетов Homebrew. В нем нужно ввести такие команды:

brew tap ethereum/ethereum
brew install ethereum

Инсталляция клиента на Linux также требует введения определенных команд через терминал. Они представлены ниже:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

Далее нужно создать аккаунт майнера. Таким образом, мы сгенерируем приватный и публичный идентификатор, а также установим пароль для их защиты. В качестве примера мы рассмотрим создание профиля на MacOS через менеджер пакетов Homebrew. Нам нужно ввести следующую команду: geth account new --datadir /path/to/data/dir. В конце прописан адрес, по которому будут храниться наши ключи.

После этого переходим к самому интересному — созданию первого генезисного блока. Команда для генерирования первого элемента нашей приватной сети указана ниже:

geth -datadir <path-to-data-directory> init <path-to-genesis-block>

В этой команде для нас наибольшую важность представляют 2 значения:

  • datadir — адрес, по которому будут располагаться ключи;
  • init — начало создания первого блока с именем genesis.json.

Вот как будет выглядеть код генезисного блока:

{ 

"config": {
"chainId": 15, 
"homesteadBlock": 0, 
"eip155Block": 0, 
"eip158Block": 0
},
"difficulty": "0x400", 
"gasLimit": "0x2100000", 
"alloc": {
		"7a69b359e86893efa3d9732e4c65ced51567edd0":
	 	{ "balance": "0x1337000000000000000000" }
}
}

Прописанные в коде команды имеют следующие значения:

  1. chainid — гарантирует обмен информацией в сети Ethereum без использования блокчейна Ethereum Classic, а также тестовой сети Morden.

  2. homesteadBlock со значением «0» — это значит, что в нашей приватной сети будет применяться релиз Ethereum Homestead.

  3. eip155Block со значением «0» — сеть поддерживает протокол EIP (Предложения по улучшению Эфириума) под номером 155. В предложениях EIP прописаны ключевые стандарты для функционирования блокчейна Эфириума.

  4. eip158Block со значением «0» — генезисный блок, а значит и все последующие элементы приватного блокчейна, поддерживают EIP 158.

  5. difficulty — уровень сложности при поиске значения nonce к генезисному блоку (об элементе nonce мы говорили чуть выше).

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

  7. alloc — параметр, обеспечивающий предварительное распределение Эфириума из генезисного блока на один или несколько аккаунтов. Код первичного блока, указанный выше, подразумевает пересылку всех монет на один аккаунт.

После создания первого элемента сети можно приступать к генерации следующих блоков. Иными словами, начинается процесс майнинга. Майнить мы будем через клиент Geth. Чтобы запустить процесс, надо ввести в менеджере пакетов такую команду:

geth --mine --rpc --networkid <networkd-id> --datadir <path-to-data-directory>

Пример:

geth --mine --rpc --networkid 1999 --datadir /path/to/data/dir 

При активации майнинга важную роль играют следующие значения:

  1. networkid — сетевой идентификатор приватного блокчейна Эфириум.

  2. mine — команда, активирующая майнинг.

  3. rpc — команда, активирующая сервер HTTP-RPC. Благодаря ей, бумажники других пользователей локальной сети могут подключаться к созданному узлу майнинга.

  4. rpcaddr — команда, указывающая интерфейс для работы на вышеупомянутом сервере. Изначально установлен интерфейс localhost.

  5. rpcport — даёт указание на порт для работы HTTP-RPC. Здесь по умолчанию выставлено значение 8545.

  6. rpcapi — указывает программные интерфейсы приложений (API), доступные на сервере HTTP-RPC. Изначально выставлен eth,net,web3.

  7. rpccorsdomain — команда, активирующая CORS. Она указывает перечень доменов, с которых разрешено принимать запросы.

  8. nodiscover — команда, отключающая поиск пиров. Созданный вами узел не смогут найти другие ноды сети. Но если вы хотите применять несколько блокчейнов в одной локальной сети, данный параметр не надо активировать.

  9. console — данная команда может запускать майнинг с интерактивным окружением jаvascript (этот параметр больше подходит продвинутым пользователям).

Процесс майнинга можно начинать непосредственно через Geth или запускать консоль отдельно, а потом подключать её к узлу специальной командой. Выглядит эта команда так:

geth --datadir <path-to-data-directory> attach ipc:<path-to-data-directory>/geth.ipc 

Пример:

geth --datadir /path/to/data/dir attach ipc:/path/to/data/dir /geth.ipc 

После подключения консоли Geth можно просматривать все аккаунты приватного блокчейна Эфириума, а также следить за их балансом. В этом вам помогут следующие 2 команды:

> eth.accounts
["0x7a69b359e86893efa3d9732e4c65ced51567edd0"] 

> eth.getBalance("0x7a69b359e86893efa3d9732e4c65ced51567edd0")
1.295e+21 

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

Виталик Бутерин о блокчейне и Эфириуме:

31

Другие новости по теме:

Добавление комментария
Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Если Вы не робот, то подтвердите это: *