Какой протокол в кошельках эфир
Перейти к содержимому

Какой протокол в кошельках эфир

  • автор:

Что такое эфириум: Всё, что вам нужно знать об этой криптовалюте

Эфириум — это программная платформа с открытым исходным кодом, основанная на технологии блокчейн. Эта платформа позволяет разработчикам создавать и развёртывать на ней децентрализованные приложения (даппы), такие как Status или Metamask.

Как две ведущие криптовалюты по рыночной капитализации, биткоин и эфириум часто упоминаются в одном и том же контексте. Поэтому новичкам может быть трудно сразу понять, что такое эфириум и чем он радикально отличается от биткоина. На официальном сайте под слоганом Build unstoppable applications («Создавайте приложения, которые невозможно остановить») вы найдёте следующее описание эфириума:

Про эфириум часто говорят, что он призван стать «мировым компьютером».

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

В качестве отправной точки подумаем об эфириуме как о талантливом и более универсальном младшем брате биткоина. Поехали!

История эфириума

Кто такой Виталик Бутерин

Эфириум начался с одного человека, и этот человек — Виталик Бутерин. В отличие от биткоина, за эфириумом стоит реальная личность, если хотите, лидер. Бутерин — российско-канадский программист и журналист, известный прежде всего своей работой над эфириумом и тем, что в 2011 году он стал соучредителем журнала «Биткоин». Он также известен как один из создателей криптовалютного торгового сайта Egora.

Но прославил Бутерина именно эфириум. Виталик разработал концепцию платформы в 19 лет. Он получил стипендию Питера Тиля в размере $100 000, бросил университет, где изучал информатику, и начал развивать свой проект.

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

Бутерин — видный представитель криптовалютного сообщества. Вы можете посетить его официальный сайт, где он публикует свои статьи, или подписаться на его Твиттер.

Ранние дни эфириума

Работая над биткоином в 2013 году, Бутерин обратил внимание на то, у этого блокчейна нет собственного языка для написания сценариев. Он пришёл к выводу, что это большое упущение, которое стоит исправить. Не получив широкой поддержки этой идеи, он занялся собственным проектом.

В конце 2013 года был выпущен white paper эфириума. В этом документе Бутерин так описал свою цель: «обеспечить блокчейн встроенным полноценным языком программирования, который можно использовать для создания смарт-контрактов».

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

Бутерин официально анонсировал эфириум на Североамериканской биткоин-конференции в Майами в январе 2014 года. Он ожидал, что люди быстро укажут ему на недочёты и ошибки. Но, к его удивлению, многие безоговорочно поддержали молодой проект.

Как рос эфириум

Эфириуму удалось завоевать доверие общественности, и для управления его развитием была создана некоммерческая организация Ethereum Foundation. Развитие было профинансировано ICO, стартовавшим в июле 2014 года.

В ходе первичного предложения монет эфириум выпустил собственный токен — эфир (ETH). ETH — это валюта, которая управляет всем в экосистеме эфириума. Ethereum Foundation провела первоначальное распределение ETH через публичную предпродажу, собрав 31 591 биткоин (в то время это было $18 439 086) в обмен на 60 102 216 ETH.

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

Эфириум привлёк множество разработчиков, которые занялись базовой технологией и созданием собственных приложений приложения поверх блокчейна. Согласно State of the DApps (некоммерческому кураторскому каталогу децентрализованных заявок), сейчас на эфириуме работает более 950 проектов. Основная технология уже прошла через несколько версий. Токен ETH, стоивший всего несколько центов, вырос в цене до $1500.

На платформе эфириума было проведено бесчисленное количество ICO, и эта тенденция, похоже, сохранится и в обозримом будущем продолжит набирать темп. Были и проблемы. Одно событие едва не утопило весь проект.

Взлом DAO

DAO — это децентрализованные автономные организации, которые работают по правилам, закодированным в смарт-контракте на блокчейне. Одна из таких организаций, основанная Кристофом Дженчем в 2016 году (она так и называлась — DAO), вызвала в сообществе серьёзные переполох. DAO представляла собой сложный смарт-контракт, призванный управлять созданием децентрализованного венчурного фонда, который мог бы вкладывать свой капитал в различные проекты развития децентрализованных приложений.

Код DAO должен был исключить необходимость доверять людям и обеспечить автономное функционирование проекта.

Принцип работы DAO был довольно прост. Если бы вы хотели повлиять на деятельность децентрализованного венчурного фонда, вам пришлось бы купить DAO-токены за ETH. Желающие получить финансирование выдвигали предложения, которые выставлялись на голосование. Чтобы продвинуться вперёд, было необходимо получить 20% голосов всех держателей токеновDAO. Чем больше денег вы вкладывали в DAO, тем больше весаимел ваш голос.

Инвесторы бросились покупать токены, потратив более $150 млн. (рекордная сумма). Однако, как только инвестиции были собраны, DAO подверглась атаке.

17 июня 2016 года кто-то использовал уязвимость в стандартном коде смарт-контракта и списал одну треть средств, хранящихся у DAO, — $50 млн. на тот момент. Это событие подробно описано во множестве статей, поэтому здесь мы обойдёмся без технических подробностей.

Суть в том, что молодая технология получила удар в спину. В конечном итоге сообщество эфириума выработало решение, которое помогло устранить последствия этого ЧП.

Хардфорк и Ethereum Classic

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

Вот краткое объяснение различий между двумя видами форков:

  • хардфорк: предстоящее обновление программного обеспечения будет конфликтовать с текущей версией сети;
  • софтфорк: предстоящее обновление программного обеспечения совместимо с текущей версией сети.

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

Спорное предложение вызвало раскол, который привёл к появлению двух ветвей эфириума — двух версий одной и той же исходной сети. Эфириум, который мы знаем сегодня, включает большинство пользователей и лидеров сферы (включая Бутерина): они приняли измененную историю транзакций. Меньшинство, которому идея не понравилась, создало Ethereum Classic.

Ethereum Classic не достиг высот «настоящего» эфириума, но по-прежнему существует и неплохо себя чувствует.

Хардфорк доказал, что эфириум в целом довольно устойчив. Закончив обзор истории, перейдём к тому, как работает эфириум.

Майнинг эфириума

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

Название вводит в заблуждение; более точным термином будет «процессоры транзакций». Чтобы убедиться, что транзакции надёжно и правильно записаны, компьютеры решают сложные алгоритмическиезадачи, и делают это как можно быстрее, чтобы получить вознаграждение (оплачиваемое в ETH). Этот алгоритм получил название Proof-of-Work (доказательство работы), и именно он обеспечивает целостность и жизнеспособность сети.

У такого метода есть некоторые недостатки, например, он потребляет огромное количество электроэнергии и требует производительного оборудования. Для большинства рядовых людей он слишком дорог, что привело к сосредоточению майнеров в майнинг-пулах. Другими словами, этот метод привёл к централизации.

В августе 2017 года Бутерин объявил о планах уйти от Proof-of-Work. В своём предложении, часто называемом Casper, он заявил, что эфириум перейдёт от чистого Proof-of-Work к гибридному алгоритму Proof-of-Work/Proof-of-Stake (доказательство владения). В отличие от консенсусного протокола PoW, протокол PoS проверяет транзакции посредством усилий валидаторов (этот термин пока не принят как окончательный), которые вкладывают свои монеты в специализированные кошельки. Участники системы отдают свои средства с пониманием того, что потеряют депозиты, если не будут следовать правилам.

В отличие от Proof-of-Work, где алгоритм платит майнерам, которые решают математические задачи для проверки транзакций и создания новых блоков, Proof-of-Stake позволяет валидаторам делать ставки на то, какой из блоков, по их мнению, будет добавлен в блокчейн. Если валидатор оказывается прав, он получает вознаграждение пропорционально своей ставке (или доле владения).

Casper предполагает смешение функций старого метода PoW и нового PoS с постепенным переходом к последнему. Сторонники Casper надеются, что это изменение сделает протокол более экологичным, не требующим огромных затрат энергии. Между тем противники указывают на то, что его запуск уже не раз откладывался, а это значит, что PoS на самом деле не подходит эфириуму. Другие подчёркивают более важную проблему — обеспечение безопасности (учитывая, что в сети вращаются миллиарды долларов). Впрочем, разработчики обещают, что PoS будет более безопасным.

Как работает эфириум

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

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

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

У каждого блокчейна есть определённый тип алгоритма достижения консенсуса. Сеть использует эти алгоритмы для согласования единственно верного значения данных. Как мы уже обсуждали, новые эфириум-транзакции пока подтверждаются майнерами с использованием той же системы Proof-of-Work, что и у биткоина, но грядут перемены, которые уже давно находятся в разработке.

Теперь давайте посмотрим на некоторые ключевые особенности эфириума.

Виртуальная машина эфириума \(EVM\)

До появления эфириума криптовалюты обладали скудным диапазоном функций (а иногда и вовсе единственной функцией). Так, функция биткоина — быть цифровой валютой.

Разработчики зашли в тупик: им было необходимо либо расширить функциональность биткоина на существующем блокчейне (что очень сложно с технической стороны), либо создать с нуля новую платформу. Признав этот тупик, Бутерин начал работу над EVM.

Вот что писало издание The Merkle:

Давайте попробуем разобраться, что такое EVM и зачем она нужна.

Каждый раз, когда программа или транзакция активируются, сеть должна обрабатывать эти данные. Контракты, написанные на разных языках программирования, скомпилированы в «байт-код», который EVM может расшифровать и выполнить (что-то вроде Google Translate для кода). Это означает, что любой может запускать любую программу, независимо от того, на каком языке она написана, если есть достаточно времени и памяти.

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

Смарт\-контракты

Смарт-контракты — это тот самый «секретный ингредиент» эфириума. Концепцию смарт-контрактов предложил в 1996 году учёный Ник Сабо (по одной из версий, он и есть Сатоши Накамото). Смарт-контракты — это компьютерные программы, которые контролируют передачу цифровых валют или активов между сторонами, если выполняются определённые условия.

Смарт-контракты выполняют операции типа if-then («если. то»). Если, например, смарт-контракт используется для управления торговым автоматом, то он будет выглядеть примерно так: «Если кто-то помещает доллар в торговый автомат, торговый автомат выдаёт банку кока-колы».

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

Всё это возможно благодаря смарт-контрактам. Они эффективно поддерживают транзакции и соблюдение договорённостей в полностью цифровой среде. Давайте рассмотрим конкретный пример.

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

Водителю можно было заплатить, например, $15 без необходимости сторон доверять друг другу или даже друг с другом общаться. Водитель гарантированно получит оплату, если доставит другое лицо в указанную точку по GPS.

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

Токен ERC20

ERC20 — это название набора стандартных требований для тех, кто хочет выпустить новый токен на блокчейне эфириума. ERC расшифровывается как «Запрос на комментарии эфириума».

Введённые в конце 2015 года требования ERC20 были неофициальными руководящими принципами, пока не получили официального оформления на странице эфириума на GitHub. Основное назначение ERC20 — обеспечить, чтобы токены на основе эфириума вели себя предсказуемым образом во всей экосистеме, децентрализованные приложения и смарт-контракты одинаково взаимодействовали на всей платформе и чтобы все токены соответствовали фиксированному стандарту безопасности. В общем, речь идёт о стандартизации.

Учитывая огромное количество ICO, проводимых на эфириуме, неудивительно, что потребовался стандарт. По состоянию на январь 2018 года для токенов ERC20 существует более 21 000 смарт-контрактов, и именно стандартизация гарантирует их стабильную работу в сети эфириума.

Запас эфира, или «газ»

Мы уже упоминали, что эфир — это валюта, которая заставляет экосистему эфириума работать. Веб-сайт эфириума объясняет это следующим образом:

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

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

Кому нужен эфир? Любой разработчик, желающий создать приложение на эфириуме, или любой человек, желающий получить доступ к смарт-контракту, должен располагать эфиром. Эфир также может использоваться как валюта. По мере того как сеть биткоина замедлилась в своём развитии, а транзакционные комиссии стали выше (особенно это было заметно в конце 2017 — начале 2018 года), некоторые пользователи переключились на эфир как средство обмена.

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

72 млн. ETH были созданы и проданы в ходе предварительной продажи;

24 млн. ETH были созданы и переданы в фонд развития, и большая часть этих средств ушла разработчикам и ранним сторонникам, а остальные — в Ethereum Foundation;

1,4 млн. ETH пришлось на так называемые Uncle Rewards — награды за запись альтернативных или «очень близких, но не совсем правильных» блоков.

На данный момент в мире циркулирует порядка 98 млн. ETH (на момент написания статьи).

Некоторые предполагают, что по мере того, как эфириум меняется, уровень выпуска ETH также может быть изменён. Однако ранее звучали обещания, что такого не случится. Как написал один из пользователей Reddit, «Casper ничего не изменит в плане запаса токенов или уровня инфляции. Это просто алгоритм PoS, построенный поверх PoW».

В 2017 году уровень эмиссии эфира составлял 14,75%, или примерно 5 ETH за блок. Следует также отметить, что выпуск эфира ограничен 18 млн. ETH в год (это число составляет 25% от размера привлечённых в ходе ICO средств).

Теперь у вас должно быть базовое представление о том, как работают блокчейн эфириума, токен ETH, смарт-контракты, стандарты ERC20 и протоколы консенсуса PoW/PoS. Для тех, кто хочет вникнуть в техническую сторону вещей, есть отличные статьи об инновационности эфириума.

Как можно использовать эфириум?

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

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

Некоторые просто используют его в качестве упомянутого топлива для экосистемы. ETH также продаётся и покупается спекулянтами и инвесторами, которые считают, что стоимость проекта эфириум и сети даппов со временем вырастет. Практика показывает, что они правы.

Конечно, у эфириума есть и много других применений:

  • ICO. Львиная доля ICO, произошедших за последние несколько лет, была размещена на блокчейне эфириума. Когда речь заходит о финансировании проектов с открытым исходным кодом, эфириум —предпочтительный вариант.
  • Даппы. На эфириуме построено множество децентрализованных приложений, и их число растёт. Существует Augur, рынок децентрализованных прогнозов; etherTweet, основанная на бокчейне платформа без цензуры; TenX, приложение, которое планирует позволить людям использовать эфир почти везде; а Uport предоставляет пользователям возможность полностью контролировать свою личную информацию. И это только малая часть.
  • DAO. Помимо той самой печально известной DAO, есть другие примеры децентрализованных автономных организаций, возникающих на эфириуме. Технически криптовалюта Dash — это DAO, как и токен Digix.io.

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

Преимущества эфириума

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

  • Неизменность. Данные, записанные в блокчейне, не могут быть изменены или удалены третьим лицом.
  • Без цензуры. Приложения эфириума основаны на сети, где действует принцип консенсуса. Это делает цензуру невозможной.
  • Защищённость. Защищённый криптографией блокчейн доказал, что он невосприимчив к мошенничеству или взлому. У эфириума нет центральной точки отказа.
  • Прозрачность. Все записи доступны для всех. В будущем, по слухам, ожидается конфиденциальность, но пока все данные открыты.

Недостатки эфириума

У эфириума много преимуществ, но, увы, ничто не идеально. Вот несколько недостатков:

  • Код смарт-контрактов не идеален. DAO стала ярким примером того, как человеческая ошибка может привести к серьёзным проблемам. Если ошибка в коде становится явной, нет реального способа остановить атаку, за исключением (быстрого!) консенсуса сети и/или переработки базового кода.
  • Сделки на эфириуме происходят не так быстро. Хотя в некоторых случаях скорость не важна, другие сценарии могут сильно пострадать из-за этого недостатка. Эфириум может обрабатывать около 20 транзакций в секунду, в то время как Visa обрабатывает более 1500.
  • Масштабирование — проблема почти для любого блокчейна, и эфириум не стал исключением. Даже Бутерин сомневается в текущей способности эфириума к масштабированию:

Как начать работать с эфириумом

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

Клиентское программное обеспечение позволит вам совершать различные действия, наиболее важные из которых:

  • подключение к сети эфириума;
  • создание новых транзакций и смарт-контрактов;
  • запуск смарт-контрактов;
  • майнинг новых блоков (или просто эфира).

Загружая и запуская клиент эфириума, вы превращаете свой компьютер в узел в сети с упомянутой EVM. Он будет вести себя так же, как и все остальные узлы, использующие это программное обеспечение.

Как купить эфир

Если вы хотите купить немного эфира, сделать это довольно просто. Вам достаточно выполнить следующие шаги.

  1. Во-первых, создайте учётную запись на бирже. Coinbase, вероятно, проще всего в использовании, но она взимает более высокую плату (опытные трейдеры предпочитают использовать GDAX). Есть много других вариантов, например Binance, Kraken, Gemini и Bittrex. Выберите биржу по вкусу и создайте аккаунт.
  2. Пройдите процесс проверки. Любая авторитетная биржа потребует, чтобы вы подтвердили свою личность несколькими способами. Вам придётся загрузить несколько документов и фотографий и предоставить немного информации о себе. В большинстве случаев вы сможете начать работу сразу же, но для вывода средств (за пределами определённого лимита) проверка должна быть завершена, что занимает несколько дней.
  3. Пополните свой счёт на бирже фиатной валютой. Обычно это осуществляется посредством банковского перевода или с помощью кредитной/дебетовой карты (за такие переводы комиссия выше). Принимаемые способы оплаты и время, необходимое для перевода средств, варьируются в зависимости от биржи.
  4. Начните покупать эфир. После регистрации, проверки и внесения средств вы можете перейти к делу. У разных бирж разные интерфейсы, и по большинству из них есть видеоруководства, которые помогут вам, если вы застряли на каком-либо из этапов.

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

Как безопасно хранить эфир

Для того чтобы токены были надёжно защищены, необходимо строго контролировать приватные ключи. О каких ключах речь?

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

Закрытый ключ — это ещё одна длинная строка случайных символов, которая позволяет вам разрешать транзакции ETH.

Простая аналогия: ваш открытый ключ это — номер вашего банковского счёта, а приватный (закрытый) ключ — пин-код. Обращайтесь с ними соответственно.

У вас есть несколько вариантов хранения ETH. Вы можете оставить их на бирже, переместить в собственный кошелёк на компьютере или мобильном устройстве, в автономный аппаратный кошелёк или же в бумажный кошелёк.

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

Представьте, что у вас есть $20 и вы можете оставить их лежащими в бардачке автомобиля. Это будет аналогом биржи. Если бы у вас было $1500, вы могли бы хранить их в своём кошельке и были бы очень осторожны с ним. Это похоже на мобильный или компьютерный кошелек. Если бы у вас было $100 000, вы, вероятно, оставили бы их на застрахованном банковском счёте или в сейфе. Это уже будет аппаратным кошельком.

Многие начинают с кошелька MyEtherWallet. Если вы хотите большей безопасности, присмотритесь к Ledger Nano S — самому популярному аппаратному кошельку.

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

Также будьте осторожны при загрузке или установке любого кошелька, так как всегда есть риск фишинга.

Биткоин и эфириум: В чём разница?

Давайте рассмотрим некоторые ключевые моменты. Самое большое различие между этими двумя гигантами криптовалютного мира — их цели. Биткоин стремится стать средством обмена («цифровым золотом») и валютой, распространённой во всём мире. Эфириум хочет стать глобальной платформой, на которой работают децентрализованные приложения и смарт-контракты.

На этом рисунке представлены заметные различия между биткоином и эфириумом:

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

Конкуренты эфириума

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

Хотя некоторые рассматривают форк Ethereum Classic как позитивный пример принятия сообществом сложного решения, он определённо нанёс по эфириуму некоторый удар. Запланированный переход с алгоритма PoW на гибридную версию с PoS тоже может вызвать серьёзные неудобства. Другая проблема, на которую часто указывают, —трудности, с которыми сталкиваются разработчики при взаимодействии с эфириумом.

Так, консультант по блокчейну Брайан Шустер признал:

Но самая большая проблема эфириума — масштабирование. Эфириум всё ещё далёк от возможности запускать приложения с 10 млн. пользователей.

Это продемонстрировала основанная на эфириуме игра CryptoKitties, выпущенная в ноябре 2017 года. Её идея в том, что люди могут покупать и продавать цифровых кошек за реальные деньги с помощью смарт-контрактов. Они также могут выводить в своём «питомнике» уникальных животных. Котята — ограниченный ресурс со множеством «кэтрибутов», некоторые из которых чрезвычайно редки.

Игра вызвала ажиотаж, и в какой-то момент этот проект, в который было вложено более $6,5 млн., забрал на себя значительную долю трафикавсей системы.

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

Сообщество лихорадочно ищет решения, но как быстро они будут внедрены и насколько успешными окажутся, ещё предстоит увидеть.

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

Вот пять основных конкурентов эфириума (но есть и другие).

  • QTUM должен объединить функциональные возможности биткоина и эфириума в формате блокчейна, удобного для бизнеса. Как и эфириум, QTUM может работать со смарт-контрактами. Он учёл ряд ошибок своего «старшего брата» эфириума и обещает их не повторять. был основан бывшими участниками команды эфириума. Это ещё один блокчейн, ориентированный на смарт-контракты. Его создатели вкладывают особые усилия в масштабируемость и демократизацию процесса голосования. часто упоминается как «китайский эфириум». Этот проект нацелен на оцифровку многих видов традиционных активов для их использования в смарт-контрактах.
  • Ethereum Classic — это продукт хардфорка эфириума, о котором мы не раз говорили. Очевидно, что он конкурирует с оригинальным эфириумом, делая всё то же самое, что и оригинальный блокчейн, только в меньших масштабах.
  • Lisk, пожалуй, самый яркий конкурент эфириума. Будучи платформой для смарт-контрактов и даппов, Lisk достиг определённых успехов в работе с сайдчейнами, чтобы оптимизировать свою сеть и добиться её масштабируемости.

Будущее эфириума

Эфириум уже можно считать безумно успешным проектом, и нет сомнений, что над ним работает одна из самых новаторских команд киберпространства.

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

Пока эфириум твёрдо держит марку. Если вам нужны доказательства, подумайте о следующем:

  • По мере того как токены, базирующиеся на эфириуме, растут в цене, активы базовой платформы также растут.
  • Многим предпринимателям и разработчикам для использования сети необходим газ, и это органично стимулирует спрос на ETH и повышает его ценность.
  • Несколько крупных компаний, такие как JPMorgan Chase, BBVA, Accenture, Microsoft и Intel, собрались вместе и создали группу под названием Enterprise Ethereum Alliance (EEA), которая фокусируется на разработке приложений, использующих блокчейн эфириума.
  • Поскольку варианты использования даппов продолжают расширяться и технология растёт для удовлетворения спроса, эфириум, пользуясь этим трендом, расширяет свою сеть.
  • Сообщество эфириума объединяет ярких, талантливых и умных людей. Оно не столь склонно к шумихе, как сообщества многих других блокчейн-проектов.

Этот список позволяет сделать вывод, что команду Бутерина в будущем ждёт ещё больший успех. Однако скептики придерживаются противоположного мнения. Они приводят следующие аргументы:

  • Эфириум не сможет разобраться с сетевыми перегрузками достаточно быстро и отстанет от конкурентов.
  • Виталик Бутерин — «точка отказа». Будучи публичным лицом и движущей силой эфириума, он практически незаменим. Если с Бутерином что-то случится или он просто решит забросить своё детище, это может убить проект.
  • Многие из случаев использования эфириума (и его даппов) —теоретические или непрактичные. Есть версия, что команда эфириума ищет надуманные проблемы, чтобы подогнать под них «красивые» решения.
  • Климат в сообществе может испортиться. Эфириум уже прошёл через один хардфорк, и не исключено, что в будущем его ждут другие. Последствия этого предсказать трудно, но разлад в сообществе в своё время сильно ударил по биткоину.

Заключение

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

Стоимость токена ETH зависит от спроса и предложения, как и у любого другого актива. Если создание новых даппов продолжится и сеть эфириума будет по-прежнему привлекать инвесторов, цена продолжит расти. И наоборот.

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

Что такое Ethereum?

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

Изображение человека, всматривающегося в базар, призвано быть олицетворением Ethereum

Обзор

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

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

Продолжите читать, чтобы узнать больше…

Каковы возможности Ethereum?

Банковское обслуживание для каждого

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

Открытый Интернет

Каждый может взаимодействовать с сетью Ethereum или создавать на ее основе приложения. Это позволяет вам самостоятельно контролировать свои активы и персональные данные, не передавая управление ими нескольким крупным корпорациям.

Пиринговая сеть

Ethereum позволяет вам заключать соглашения, координировать или передавать цифровые активы напрямую другим людям. Вам не нужно полагаться на посредников.

Устойчивость к цензуре

Ни правительство, ни компании не могут контролировать Ethereum. Децентрализация делает практически невозможным запрет на получение вами платежей или использование услуг на базе Ethereum.

Коммерческие гарантии

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

Компонуемые продукты

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

Зачем мне использовать Ethereum?

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

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

Более дешевые и быстрые международные платежи

Стабильные монеты — это новый тип криптовалют, стоимость которых основана на более стабильных активах. Большинство из них привязаны к доллару США, тем самым сохраняя стоимость валюты. Это позволяет сделать очень дешевую и стабильную глобальную систему платежей. Многие современные стабильные монеты построены на сети Ethereum.

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

Самая быстрая помощь во время кризиса

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

Когда война, экономические катастрофы или наступления на гражданские свободы ударили по жителям Венесуэлы (opens in a new tab)

, криптовалюты предоставили самое быстрое, а зачастую и единственное решение для поддержания финансовых взаимодействий. 1 (opens in a new tab)

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

Расширение возможностей творцов

В одном только 2021 году художники, музыканты, писатели и другие творческие личности с помощью Ethereum вместе заработали около 3,5 млрд долларов США. Это ставит Ethereum в один ряд с такими крупнейшими глобальными платформами для творцов, как Spotify, YouTube и Etsy. Подробнее (opens in a new tab)

Расширение возможностей геймеров

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

Более того, игроков стимулирует возможность обменивать внутриигровые токены на реальные деньги и таким образом получать реальное вознаграждение за свое игровое время.

Как работает Эфириум (Ethereum)?

Наверняка некоторые из вас знают, что такое блокчейн Эфириум (с англ. Ethereum), другие, напротив, не имеют даже малейшего представления о нем. Так или иначе, и первые и вторые что-нибудь да слышали о данной платформе. В последнее время этой теме было посвящено множество статей в различных крупных журналах, однако для тех людей, кто мало что слышал об Эфириуме, все статьи на эту тему представляются чем-то мистическим и совершенно непонятным. Тогда, что же собой представляет данная платформа? Если вкратце: Эфириум – это общедоступная база данных с возможностью хранения цифровых транзакций в течение неограниченного времени. Важно также отметить, что для обслуживания и защиты такой базы данных не требуется каких-либо систем управления ключами. Вместо этого данная платформа работает как «беззащитная» транзакционная система – фреймворк, в котором физические лица могут совершать одноранговые транзакции, при этом ни одна из сторон не несет перед другой или третьей сторонами каких-либо обязательств.

Я не удивлюсь, если вы мало что поняли. Собственно, цель данной статьи – объяснить, каким образом блокчейн Эфириум функционирует на техническом уровне, не прибегая для этого к сложным математическим расчетам или ужасающим своей величиной формулам. Даже если вы и не программист, у меня есть полная уверенность в том, что данная статья поможет вам понять принципы технологии Эфириума. И даже если некоторые части данной статьи будут напичканы техническими определениями, которые могут показаться вам чересчур сложными для восприятия, вам не стоит отчаиваться, ведь ее цель – донести до вас понимание данной платформы в целом, не вдаваясь в технические и математические тонкости.

Многие из тем, затронутых в данной статье, представляют собой разжевывание тех основных понятий, с которыми вы, вероятно, уже не раз сталкивались, читая yellow paper (от англ. «желтая бумага» – официальная спецификация для Эфириума). Мною были добавлены собственные пояснения и диаграммы для того, чтобы вы как можно быстрей разобрались с данной технологией. Ну, а для самых храбрых и технически подкованных я могу посоветовать прочтения Ethereum yellow paper.

Давайте уже начнем!

Что такое блокчейн

Блокчейн – это криптографически безопасная транзакционная одноэлементная система с общим состоянием. Далеко не самое простое определение, не так ли? Давайте разобьем каждую составляющую этого определения на отдельные части.

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

Парадигма блокчейна платформы Эфириум

Блокчейн Эфириум является, по сути, системой состояния транзакций. В информатике такое понятие, как «система состояний» или «машина состояний» – это система, которая обрабатывает вводимую информацию и на основании последней преобразуется в новое состояние.

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

image

image

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

Любой узел в сети, объявляющий себя майнером, может попытаться создать и проверить блок транзакций. Распространенным опытом является попытки множества майнеров одновременного создания и проверки блока транзакций. Каждый майнер предоставляет свое математическое «доказательство» при отправке блока в блокчейн, и это доказательство выступает в роли своеобразной гарантии: в случае если доказательство существует, транзакции в блоке считаются корректными.

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

Майнер, который обосновывает новый блок, получает определенное вознаграждение за выполнение этой работы. О каком вознаграждении идет речь? В блокчейне Эфириума используется встроенный цифровой токен, который носит название «эфир» (от англ. ether— «эфир»). Каждый раз, когда майнер обосновывает свой блок транзакций, создается новый токен или новый эфир, а майнер получает вознаграждение за его создание.

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

В самом начале данной статьи мы уже приводили такое понятие как «транзакционная одноэлементная система с общим состоянием». Исходя из такого определения можно сделать вывод, что не бывает двух и более корректных текущих состояний – оно является единственным в своем роде. Таким образом, каждый, кто принимает участие в процессе обоснования новых блоков, должен принять это утверждение за истину. Наличие нескольких состояний (или цепей) разрушило бы всю систему, потому что было бы невозможно договориться о том, какое из состояний является корректным. Например, представим, что существовало бы несколько цепочек блоков. Тогда, в теории, вы могли бы собрать 10 монет на одной цепочке, на другой – 20 монет, на третьей – 40 монет и т.д. В таком случае было бы невозможно определить, какая цепь является наиболее «корректной».

Всякий раз, когда генерируются несколько путей, возникает «разветвление». Зачастую, разветвления очень нежелательны, поскольку они нарушают целостность системы, а пользователям приходится выбирать одну из возможных цепочек.
image
Чтобы определить, какой из возможных путей является корректным, и предотвратить образования множества цепей, в Эфириуме применяется метод, называемый «протокол GHOST».

GHOST – «Жадное-и-Самое-Весомое-из-Известных-Дочерних-Деревьев» (Greedy Heaviest Observed Subtree)

Попробую объяснить простыми словами: протокол GHOST объявляет, что мы должны выбрать только тот путь, на котором было выполнено наибольшее число вычислений. Для определения такого пути можно использовать номер того блока, который был определен последним («листовой блок»). Благодаря такому подходу можно определить общее число блоков, находящихся в текущем пути (без учета блока первоначального состояния). Чем выше находится блок, тем длиннее путь и тем больше обоснований должны предоставить майнеры. Исходя из таких соображений, принимается единственно верная версия для текущего состояния.

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

  • учетные записи
  • состояние
  • горючее о вознаграждение
  • транзакции
  • блоки
  • выполнение транзакций
  • майнинг
  • обоснование
Учетные записи

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

Всего существует два вида учетных записей:

  • Внешние учетные записи, контролируются с помощью закрытых ключей. При этом такие записи не имеют никакого кода, связанного с ними.
  • Контрактные учетные записи, контролируются специальным кодом, указанным в условиях контракта, и имеющие связанный с ними код.

image

Внешние и контрактные учетные записи

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

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

image

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

image

Состояние учетных записей

Состояние каждой из учетных записей, вне зависимости от их типа, может принимать одно из четырех значений:

  • nonce: Если настоящая учетная запись соответствует внешней учетной записи, то полученное число представляет собой количество транзакций, которые были отправлены с адреса учетной записи. Если учетная запись является контрактной учетной записью, то элемент nonce – это количество контрактов, созданных в данной учетной записи.
  • balance: общее количество wei, приобретенных данной учетной записью. Например, каждый эфир, который является обменной единице Эфириума, содержит 10^18 wei – дробных частей эфира.
  • storageRoot: хэш корневого узла префиксного дерева Меркла (что собой представляет дерево Меркла мы рассмотрим немного позже). Дерево Меркла кодирует хэш содержимого данной учетной записи, при этом по умолчанию оно является пустым.
  • codeHash: хэш EVM-кода (от англ. Ethereum Virtual Machine; что это такое я расскажу немного позже) учетной записи. Для контрактных учетных записей данное поле является кодом, который хэшируется и хранится в виде codeHash.

image

Общее состояние системы

Итак, мы разобрались, что глобальное состояние Эфириума – это сопоставление адресам учетной записи состояний счета. Это сопоставление хранится в структуре данных – префиксного дерева Меркла.

Дерево Меркла (или «Merkle trie») представляет собой тип двоичного файла, состоящего из набора узлов, которые включают:

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

image

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

image

Для каждого значения, хранящегося внутри данного дерева, вам потребуется ввести определенный ключ. Для получения соответствующего значения, хранящегося в листовых узлах, вы должны получить команду ключа: цепочки какого дочернего узла необходимо придерживаться. Что касается Эфириума, то отображение ключа/значения, необходимого для дерева состояний, находится между адресами и связанными с ними учетными записями, в том числе balance, nonce, codeHash, а также storageRoot для каждой из учетных записей, при этом storageRoot является деревом.

image

Подобная структура префиксного дерева также может применяться для хранения как транзакций, так и страницы приема оплаты. Если останавливаться на этом более подробно, то каждый блок имеет так называемый «header» или заголовочный файл, в котором хранится хэш корневого узла трех разных структур дерева Меркла, в том числе:

  • Состояние префиксного дерева
  • Транзакции префиксного дерева
  • Страницы приема оплаты для префиксного дерева

image

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

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

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

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

image

Любой узел, для которого требуется проверка какой-либо части данных, использует так называемое «доказательством Меркла». Последнее состоит из:

  • Фрагмента данных, который должен быть проверен
  • Корневого хэша дерева
  • Так называемой «ветви» – всех хэшей, от проверяемого фрагмента данных до корня.

image

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

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

Горючее и вознаграждение

Одним из важных моментов в системе Эфириума является процесс оплаты. За любое вычисление, осуществляющееся в результате проведения операций с транзакциями внутри сети Эфириума, берется определенная плата. Номинал данной оплаты носит название «горючее» (от англ. gas).

Горючее – это единица измерения, которая используется для определения размера оплаты по конкретному вычислению. Цена на горючее – это количество «эфира», которое вы способны потратить на каждую единицу горючего. Измеряется цена на горючее в «gwei». Wei является самой маленькой единицей эфира, где 1018 Wei –это всего 1 эфир. Один gwei равен 1 000 000 000 Wei.

Для проведения любой транзакции отправитель должен установить лимит горючего, а также цену на горючее. Цена на горючее и лимит горючего – это максимальная сумма в Wei, которую отправитель готов заплатить за проведение транзакции.

Давайте представим, что отправитель устанавливает лимит горючего в 50 000 gwei, а цену на горючее – в 20 gwei. Это значит, что отправитель готов потратить не более 50 000 х 20 gwei = 1 000 000 000 000 000 Wei или 0,001 эфира для проведения данной транзакции.

image

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

image

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

image

«Куда именно я отправляю горючее?» — спросите вы. Итак, все деньги, которые были потрачены на приобретение отправителем горючего, отправляются на адрес бенефициария, который в большинстве случаев является адресом майнера. Поскольку майнеры выполняют расчеты и проверку транзакций, то именно они получают плату за горючее в качестве вознаграждения.

image

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

Оплата за использование хранилища

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

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

Для чего предусмотрена оплата?

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

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

Вполне вероятно, что вы подумаете: «А я-то тут причем? Зачем я буду платить за использование хранилища?» Ну, что вам сказать, вся сеть Эфириума берет на себя плату как за вычисления, так и за использования хранилища…как-то так.

Транзакции и сообщения

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

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

Всего существует два типа транзакций: отправка сообщений и создание контракта (другими словами, такие транзакции создают новые контракты в сети Эфириума).

Все транзакции содержат следующие элементы, вне независимости от типа первых:

  • nonce – количество транзакций, которые были отправлены отправителем.
  • gasPrice – количество Wei, которое отправитель готов отдать за единицу горючего, необходимую для совершения сделки.
  • gasLimit – максимальное количество горючего, которое отправитель готов заплатить за проведение данной транзакции. Такая сумма задается и оплачивается заранее, прежде чем какие-либо вычисления будут проведены.
  • to – адрес получателя. На момент выполнения транзакции, связанной с созданием контракта, адреса учетной записи контракта еще не существует, поэтому вместо него используется пустое значение.
  • value – количество Wei, которые будут переданы от отправителя к получателю. В транзакциях, связанных с созданием контрактов, данная величина является стартовым балансом для вновь созданной учетной записи.
  • v, r, s – данные обозначения, используемые для создания подписи, которая идентифицирует отправителя транзакции.
  • init – предназначен только для транзакций, связанных с созданием контрактов. Фрагмент EVM-кода, используемый для инициализации вновь созданной учетной записи контракта. init запускается только единожды и в дальнейшем не используется. Когда init запускается в первый раз, данный элемент возвращает тело кода учетной записи, которое представляет собой часть кода, постоянно связанную с учетной записью контракта.
  • data – это входные данные (параметры) для вызова сообщения (data является необязательным элементом, который предназначен только для вызовов сообщений). Например, если смарт-контракт играет роль службы регистрации домена, то вызов этого контракта может ожидать поля ввода (например, домен и IP-адрес).

image

Из информации, приведенной в разделе «Учетные записи», мы выяснили, что транзакции – как для вызовов сообщений, так и для создания контрактов –инициируются внешними учетными записями, а затем перенаправляются в блокчейн. Другими словами, транзакции – это своеобразный мост, соединяющий внешний мир и внутреннее состояние платформы Эфириума.

image

Но это не значит, что одни контракты не могут взаимодействовать с другими: контракты, находящиеся в глобальном контексте состояния Эфириума, могут взаимодействовать друг с другом в пределах данного контекста. Их взаимодействие или общение происходит с помощью отправки сообщений или внутренних транзакций. Единственное отличие внутренних транзакций от обычных заключается в том, что первые не создаются внешними учетными записями – но в результате создания контрактов. Они являются виртуальными объектами, которые, в отличие от транзакций, не упорядочиваются и могут существовать только в среде исполнения Эфириума.

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

image

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

Блоки

Все транзакции так или иначе сгруппированы в «блоки». Блокчейн содержит несколько таких блоков, соединенных между собой.

Такие блоки состоят из:

  • заголовка блока
  • информации о серии транзакций, включенных в данный блок
  • серии других заголовков блоков для текущих оммеров
Что такое «оммеры»?

Давайте разберемся с тем, что такое оммер (от англ. «ommer»). Оммер – это блок, родителем которого является родительский элемент текущего блока. В этой главе я вкратце опишу, для чего вообще нужны оммеры, а также из каких соображений в блоке содержится заголовки блоков для оммеров.

Их наличие, в первую очередь, обосновано тем, что время блокировки в Эфириуме намного ниже (примерно 15 секунд), чем для других блокчейнов, например, для биткоинов (примерно 10 минут). Благодаря такой особенности скорость транзакций проведения увеличивается. С другой стороны, одной из негативных сторон более короткого времени блокировки является то, что борьба майнеров за очередное блочное решение только усиливается. Такие конкурирующие блоки еще называют «блоки без родителя» (т.е. такие блоки не входят в основную цепочку блоков).

Оммеры были созданы для того, чтобы майнеры могли получить заслуженную награду за включение блоков без родителей в основную цепочку. Оммеры, включенные майнерами в основную цепочку, должны быть «действительными»: они, оммеры, должны быть потомками в шестом или более раннем поколении текущего блока. Например, после шестого поколения такие потомки не могут быть включены в основную цепь в качестве блоков без родителя: более поздние транзакции могут негативно влиять на работу системы в целом.

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

Заголовки блоков

Я уже упоминал ранее о том, что каждый блок имеет заголовок, но мы так толком и не разобрались, что это такое?

Заголовок блока – это часть блока, которая состоит из:

  • parentHash – является хэшем заголовка родительского блока (благодаря чему, собственно, блок попадает в цепочку блоков)
  • ommersHash – хэш текущего списка блоков оммеров
  • beneficiary – адрес учетной записи, на который поступает оплата за включение этого блока
  • stateRoot – хэш корневого узла состояния префиксного дерева (ранее я писал, что состояние префиксного дерева хранится в заголовке, тем самым для тонких клиентов упрощается процесс утверждения состояния)
  • transactionsRoot – хэш корневого узла префиксного дерева, содержащий все транзакции, которые перечислены в данном блоке
  • receiptsRoot – хэш корневого узла префиксного дерева, который содержит информацию об оплате для всех транзакций, перечисленных в данном блоке
  • logsBloom – Фильтр Блума (структура данных), состоящий из информации, содержащейся в журналах
  • difficulty – уровень сложности текущего блока
  • number – номер текущего блока (первоначальный блок имеет номер, равный нулю; номер блока увеличивается на единицу для каждого последующего блока)
  • gasLimit – текущий лимит горючего для текущего блока
  • gasUsed – общее количество горючего, используемого для транзакций в текущем блоке
  • timestamp – временная отметка, предназначенная для создания текущего блока
  • extraData – дополнительные данные, которые касаются текущего блока
  • mixHash – хэш, который в сочетании с элементом nonce утверждает, что для текущего блока выполняется достаточно вычислений
  • nonce – хэш, который в сочетании с элементом mixHash утверждает, что для текущего блока выполняется достаточно вычислений

Стоит заметить, что каждый заголовок блока содержит три структуры префиксного дерева для:

  • состояния (stateRoot)
  • проведения транзакции (transactionsRoot)
  • получения информации об оплате (receiptsRoot)

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

Журналы

В платформе Эфириума предусмотрена возможность вести журналы, цель которых записывать информацию о различных транзакциях и сообщениях. Кроме того, для контракта также существует возможность открытого создания записи в таком журнале с помощью объявления «события», которое требуется записать.

Запись журнала включает:

  • адрес учетной записи регистратора
  • ряд задач, которые отображают различные события, выполненные для текущей транзакции
  • любые данные, которые имеют отношение к данным событиям
Получение информации об оплате

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

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

Сложность блока – понятие, используемое для обеспечения согласованности времени, которое необходимо для валидации блоков. Для первоначального блока сложность составляет 131 072 единиц. Для вычисления сложности любого из блоков применяется специальная формула. В том случае если валидация одного из блоков произошла более быстро чем, например, валидация последующего, то протокол, используемый в Эфириуме, увеличивает сложность последнего.

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

Зависимость одного параметра, сложности блока, от другого, nonce, представлена в данной формуле:

image

где Hd — это сложность блока

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

В том случае если время, требуемое для валидации блока, оказывается меньше, чем ожидалось, то протокол занижает сложность текущего блока. Таким образом, время, требуемое для валидации блока, задается автоматически для постоянного соответствия текущим параметрам (в среднем такое время составляет 15 секунд).

Проведение транзакций

Ну, что ж, вот мы и подошли к, пожалуй, самой сложной части протоколов, используемых в Эфириуме – проведения транзакций. Давайте представим, что вы задали в сети Эфириума выполнение какой-либо транзакции. И что по вашему мнению, будет происходить с состоянием Эфириума, при проведении вашей транзакции?

image

Во-первых, любая транзакция должна отвечать определенным требованиям, для того чтобы ее выполнение не было отменено, а именно:

  • Транзакции должны отвечать требованиям RLP. RLP – это рекурсивная длина префикса (от англ. Recursive Length Prefix), представляющий собой формат данных, который используется для кодирования вложенных массивов двоичных данных. Формат RLP используется в Эфириуме для упорядочивания объектов.
  • Наличие валидной подписи транзакции.
  • Наличие валидного значения nonce. Напомню, что nonce – это количество транзакций, отправленных с текущей учетной записи. Для того чтобы такое значение было валидным, оно должно соответствовать значению nonce для учетной записи отправителя.
  • Лимит горючего для транзакции должен быть равным или больше заданного количества горючего. Заданное количество горючего включает:
  1. предопределенная стоимость, равная 21 000 единиц горючего, необходимого для выполнения транзакции
  2. Плата за горючее, используемое для отправки данных об транзакции (4 единицы горючего за каждый байт данных или код, равный нулю, и 68 – за каждый ненулевой байт данных или ненулевой код)
  3. Дополнительные 32000 единицы горючего, если транзакция связана с заключением договора

image

  • Баланс текущего счета отправителя должен содержать достаточное количество эфира для покрытия «авансовой» стоимости горючего, которую отправитель обязуется оплатить. Авансовая стоимость горючего вычисляется следующим образом: лимит стоимости горючего умножается на стоимость горючего для текущей транзакции, в результате чего мы находим максимальную стоимость горючего. Далее, к максимальной стоимости добавляется общее количество горючего, переправляемого от отправителя получателю.

В том случае если вы выполнили все указанные выше требования, вы переходите к следующему шагу.

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

image

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

  • Self-destruct set: набор учетных записей, которые будут удалены по завершении проведения транзакции
  • Log series: заархивированные и проиндексированные контрольные точки, необходимые для выполнения кода виртуальной машины.
  • Refund balance: сумму, которая должна быть возвращена отправителю по завершении транзакции. Я уже упоминал ранее, что использование хранилища, предусмотренного в Ethereum, стоит определенного количества денег, и эти деньги возвращаются отправителю после того, как он перестает использовать такое хранилище. В системе Ethereum сохраняется информация об использовании хранилища и возврата средств за его использование отправителю.

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

После завершения (удачного) транзакции и возврата горючего отправителю происходит следующее:

  • определенное количество эфира, использованного для приобретения горючего, отправляется майнеру;
  • горючее, использованное для проведения транзакции, записывается в блок для подсчета горючего (данный блок используется для хранения информации об общем количестве горючего, которое было использовано для проведения всех транзакций в данном блоке; кроме того, такой блок используется в течение валидации;
  • вся информация об учетных записях, содержащаяся в разделе self-destruct set удаляется.

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

Создание контрактов

Вы наверняка помните, что в Эфириуме существует всего два типа учетных записей: контрактные учетные записи и внешние. Когда вы встречаете термин «транзакции, связанные с создание контракта», вы должны знать, что цель такой транзакции заключается в создании новой контрактной учетной записи.

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

  • выставить ноль в значении nonce
  • настроить баланс вашей учетной записи, равный оплате за выполнение транзакции (в том случае если отправитель готов отправить некоторое количество эфира в качестве оплаты за проведение транзакции)
  • подсчитываете размер оплаты, который переходит в баланс создаваемой учетной записи со счета отправителя
  • указываете, что хранилище больше не используется вами
  • настраиваете хэш-код контракта в качестве хэша пустой строки

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

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

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

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

Сообщения

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

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

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

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

Модель выполнения

В предыдущий разделах я рассказал вам о том, как происходит выполнение транзакций. Теперь же я предлагаю вам разобраться с тем, что происходит в VM (от англ. Virtual Machine — виртуальная машина) в момент выполнения транзакций.

Часть протокола, который выполняет обработку транзакций в операционной системе Эфириума называется виртуальной машиной Эфириума (ВМЭ).

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

image

Источник: CMU

Кроме того, ВМЭ присущи все особенности стековой архитектуры. Стековая машина – это компьютер, в котором применяется алгоритм LIFO.

Размер любого элемента стека в ВМЭ равен 256 битам, а максимальный размер стека достигает 1024 битов.

Для ВМЭ предусмотрен некоторый объем памяти, который не является постоянным. В нем элементы хранятся в виде массивов байтов с обращением к словам.

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

image

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

Перейдем непосредственно в выполнения операций.

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

  • Состояние системы
  • Информация о достаточном для выполнения требуемой операции количестве горючего
  • Адрес учетной записи, которому принадлежит выполняемый код
  • Адрес отправителя транзакции – инициатора выполнения текущей операции
  • Адрес учетной записи – инициатора выполняемого кода (может отличаться от адреса отправителя-инициатора)
  • Информация о требуемом для выполнения транзакции количества горючего
  • Входные данные для выполнения операции
  • Количество Wei, которое должно быть отправлено на счет данной учетной записи в результате проведения текущей операции
  • Информация о выполняемом машинном коде
  • Информация о заголовке блока для текущего блока
  • Глубина выполнения текущего сообщения или создания контракта

После чего в ВМЭ начинается рекурсивное выполнение транзакции: вычисление состояние системы и состояние машины для каждого цикла. Состояние системы – это глобальное состояние Эфириума. Состояние машины включает в себя:

  • доступное количество горючего;
  • счетчик команд;
  • содержимое памяти;
  • активное количество слов в памяти;
  • контент стека.

Для каждого цикла из оставшегося количества горючего отнимается его определенная часть, при этом счетчик команд увеличивается.

Всего существует три возможных варианта окончания цикла:

  1. Операции, выполняемые машиной, достигают исключительного состояния (например, ввиду нехватки виртуального горючего, неверных инструкций, недостаточного количества элементов стека, значения элемента стека, превышающего размер в 1024 бит, неверного назначения JUMP/JUMPI) и, таким образом, процесс выполнения операции приостанавливается.
  2. Последовательность действий переходит к выполнению следующего цикла
  3. Операции, выполняемые машиной, достигают логического завершения (завершения выполнения процесса)

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

Окончательное оформление блоков

Давайте же наконец-то разберемся, что происходит с блоками транзакций во время их окончательного оформления.

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

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

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

3) Назначение оплаты (только в случае майнинга): В адрес бенефициария назначается 5 единиц эфира за майнинг каждого блока (в соответствии с предложением EIP-649 данная оплата будет уменьшена до 3 единиц эфира). Более того, за каждый оммер, бенефициарию текущего блока назначается оплата в виде дополнительных 1/32 от общей оплаты за текущий блок. И последнее: бенефициарию блока оммеров также назначается оплата в виде определенной суммы, для определение которой существует специальная цифра.

4) Верификация состояния и значения nonce: Для проведения данной процедуры вам необходимо обеспечить выполнение всех транзакций, а также изменение результирующих состояний. После чего вам также потребуется задать новый блок после того, как оплата за данный блок была отправлена. Процесс верификации происходит посредством сравнения завершающего состояния с состоянием префиксного дерева, хранящегося в заголовке.

Майнинг, направленный на доказательство работы

В разделе «Блоки» мы кратко ознакомились с таким понятием, как сложность блоков. Алгоритм, благодаря которому возникло понятие сложность блоков, называется доказательство выполнения работы (PoW от англ. Proof of Work).

Алгоритм PoW, используемый в системе Эфириум, носит название Ethash (ранее, но назывался Dagger-Hashimoto).

Данный алгоритм имеет следующий вид:

image

где m – это mixHash; n – nonce; Hn – заголовок нового блока (nonce и mixHash не входят сюда, поскольку данные значения должны высчитываться); Hn – nonce для заголовка блока; d – комплект данных DAG.

В разделе «Блоки» мы также ознакомились с различными значениями, предусмотренными для заголовка блока. К ним, как вы помните, относятся такие значения как mixHash и nonce. Еще раз напомню:

  • mixHash представляет собой хэш, который вместе со значением nonce подтверждает, что для текущего блока было выполнено достаточное количество вычислений.
  • nonce также представляет собой хэш, который вместе со значением mixHash подтверждает, что для текущего блока было выполнено достаточное количество вычислений.

Объяснить каким именно образом mixHash и nonce высчитываются с помощью функции PoW достаточно сложная задача, и, собственно, этому моменту можно посвятить целую статью. Но если вкратце, то происходит следующее:

Значение «семени» рассчитывается для каждого из блоков. Для подсчета каждого из семени существует свой собственный «интервал», при этом каждый из интервалов равен 30000 блоков. Для каждого интервала семя является хэшем, равным серии из 32-байтовых нулей. Для каждого последующего интервала предусмотрен определенный хэш – хэш для предыдущего семени. С помощью данного семени узел находит значение псевдослучайного «хэша».

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

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

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

Майнинг как механизм защиты

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

Что же значит безопасный блокчейн? Ответ довольно прост: безопасный блокчейн – это блокчейн, которому будут доверять абсолютно ВСЕ ПОЛЬЗОВАТЕЛИ. Как я уже писал выше, в случае если в блокчейне существует более двух цепочек, то, вполне логично предположить, пользователи не будут чувствовать себя уверено во время работы с блокчейном, поскольку никто не сможет с точностью сказать, какая из представленных цепочек является валидной.

Именно для этого применяется алгоритм PoW: обеспечивает единство цепочки в блокчейне, препятствуя созданию других цепочек блоков, которые могут повлиять на историю выполнения транзакций (например создание ненастоящих транзакций или удаление или изменение существующих). Таким образом, для того чтобы злоумышленник смог первым провести валидацию своих блоков, ему придется постоянно определять значение nonce, при чем делать это быстрее всех других пользователей сети (надеюсь, вы помните про протокол GHOST, который я описывал ранее). Само собой, для злоумышленника такой метод будет неосуществим, если только в его распоряжении не находится большая часть майнинговых ресурсов сети – такой сценарий известен как атака 51 %.

Майнинг как средство распределения финансов

Помимо того, что алгоритм PoW обеспечивает безопасную работу блокчейна, благодаря ему также осуществляется распределение вознаграждения тем пользователям, чьи вычисления были использованы для обеспечения безопасности. Я уже писал выше, что майнеры получают вознаграждение за майнинг того или иного блока, а также:

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

Для того чтобы не допустить подобных проколов в Эфириуме применяется специальный алгоритм PoW с последовательной памятью (Ethhash). структура алгоритма построена таким образом, что для вычисления значения nonce требуется задействовать большой объем памяти и высокую пропускную способности соединения. Требования, связанные с наличие большого объема памяти, подразумевают, что для компьютера с обычным объемом памяти будет очень сложно провести параллельное вычисление нескольких значений nonce одновременно. Что до требований к высокой пропускной способности, то даже для сверхбыстрого компьютера обнаружение нескольких значений nonce одновременно станет непростой задачей. Таким образом, благодаря таким особенностям данной системы обеспечивается снижение вероятности централизации рисков и, кроме того, создаются более равномерные условия для работы различных узлов, выполняющих верификацию.

Кстати, не так давно я узнал о том, что Эфириуме собирается переключиться с алгоритма PoW к некоему методу, который носит название «Доказательство доли владения» (от англ. Proof-of-stake). Такой метод сам по себе достоин отдельной статьи для обзора и обсуждений.

Заключение

Ну, вот мы и подошли к логическому завершению нашей статьи.

На самом деле данная статья дает много пищи для размышлений. Вам совершенно не стоит переживать на тот счет, если вы осилили данную статью со второго или третьего раза. Я лично перечитывал yellow paper и white paper для Эфириума множество раз, прежде чем начал вникать в суть дела.

Я очень надеюсь, что данная статья все-таки оказалась для вас полезной. Если вы нашли какие-то ошибки, я буду вам очень благодарен, если вы сообщите мне о них.

Sorry, you have been blocked

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

What can I do to resolve this?

You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.

Cloudflare Ray ID: 80ed83194ec4b392 • Your IP: Click to reveal 45.84.122.41 • Performance & security by Cloudflare

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *