Обзор криптовалют / Ethereum

Обзор криптовалют / Ethereum

Digital Gold / Цифровое золото @nanocat

Ethereum

Дата обзора:  5/12/2017

Название:  Ethereum (eth)

Количество монет:  На момент краудсейла эфира было сгенерировано 72 000 000 монет, 60 000 000 пошло инвесторам, а оставшиеся 12 000 000 выделено как поощрения команде разработчиков и другим участникам проекта. Учитывая, что блок генерируется каждые 15-20 секунд, и за каждый блок эмитируется 5 eth – в сутки получается около 5600 блоков и около 28000 монет, в год это около 10 миллионов монет. А общее количество монет никак не ограничено в коде и нет никакого лимита. Думаю, это должно настораживать будущих инвесторов.

Текущая капитализация:  44,790,689,204$

Дата старта:  12/2013 (Idea), 04/2014 (ICO), 30/07/2015 (release)

Текущая цена: 460$ / 0.04 BTC

Текущая высота блоков:  4 678 526

Создатель:  Виталик Бутерин, Gavin Wood

История:

В конце 2013 года Виталик в своем BitcoinMagazine опубликовал что-то вроде whitepaper или идеи криптовалюты. В середине 2014 года было организовано ico эфириума. В результате которого было собрано около 32 000 биткоинов и выдано инвесторам около 60 000 000 монет эфириума + 12 000 000 ушло команде разработчиков. И только где-то через год, 30 июля 2015 года была запущена первая бета версия сети Frontier, в которой не гарантировалась безопасность сети. 14 марта 2016 года вышло обновление Homestead, являющееся ранней, но уже стабильной версией протокола.


История Ethereum богата на взломы. Первый и самый масштабный был после запуска The DAO в июне 2016го, в результате ошибки в исходном коде было уведено Эфириума на сумму 50 миллионов долларов. Но из-за особенностей работы The DAO – вывести средства можно было только спустя месяц, поэтому, после долгих обсуждений было принято решение сделать хард-форк и вернуть инвесторам их средства. Поэтому 20 июня 2016го был произведен хардфорк, который не был принят всем сообществом, а только частью, так и появился Ethereum Classic. Позже были и другие громкие взломы, например взлом из-за уязвимости в muitisig контрактах, позволяющих переопределить владельца кошелька - http://www.forbes.ru/tehnologii/348215-utechka-efira-kak-hakery-odnim-mahom-pohitili-kriptovalyutu-na-32-mln позволил хакерам увести эфира на 32 миллиона долларов.

Инфраструктура:

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

Описание технологии и отличительные стороны:

Был у меня товарищ, влил в эфир еще на ico. Что с ним сейчас – не знаю - зазнался, перестали общаться. Та же история и с смарт-контрактами эфира. Разработчик делает свой токен; разработчик получает немерено биткоинов; разработчик зазнается, едет на Бали или в Тайланд и больше в глаза не хочет видеть эти смарт-контракты и Solidity; Profit!!1.

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

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

Кроме того, у биткоина есть встроенный язык программирования. стек-ориентированный и тьюринг неполный (т.е. он не выглядит как привычный паскаль или бейсик, которому учили в школе и вузе всех, или почти всех). Этот язык так и называется script, и используется в транзакциях в двух случаях – когда нужно подтвердить, что вы можете потратить средства из транзакции (locking script) и когда необходимо предоставить доказательство выполнения условия из locking script (unlocking script). Этот язык содержит около 80 операторов, и примерный вид его ленты байт следующий:

3 2 OP_ADD 5 OP_EQUAL

Выполнение же этого скрипта требует перебора всех элементов ленты байт и занесение всех констант в стек.

Допустим стек пуст. Тогда начинаем выполнение:
1.
Стек: 3
Лента: 2 OP_ADD 5 OP_EQUAL
Комментарий: константа, кладем в стек и следующий шаг
2.
Стек: 3, 2
Лента: OP_ADD 5 OP_EQUAL
Комментарий: константа, кладем в стек и следующий шаг
3.
Стек: 5
Лента: 5 OP_EQUAL
Комментарий: OP_ADD – оператор сложения двух верхних элементов из стека и замена их на результат. В нашем случае 3 +2 = 5
4.
Стек 5 5
Лента: OP_EQUAL
Комментарий: константа, кладем в стек и следующий шаг
6.
Стек: TRUE
Лента: пусто
Комментарий: Оператор OP_EQUAL сверяет два верхних элемента из стека и кладет результат в стек.
В итоге, в стеке один элемент – TRUE. Что означает, что скрипт завершился успешно.

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


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


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


>  Блокчейн

Модель дерева состояний сети в блоке

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

Изменение состояние в блокчейне

Дерево Патриция – это алгоритм хранения данных формата «ключ-значения» внутри дерева. По сути это ассоциативный массив. Суть та же, что и у merkle root – возможность быстро подтвердить какой-то узел в дереве не скачивая целиком все узлы. В эфире данных дерева три, для объектов разных типов:

  • транзакции;
  • квитанции (по сути, данные о результатах выполнения каждой транзакции);
  • состояния сети

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

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


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


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

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

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

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

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

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

Вообще, состояние в биткоине – это транзакция, а точнее UTXO. Расчет UTXO для определенного адреса и составляет его текущий баланс. В Эфире состояние это аккаунт. Аккаунт хранится в дереве патриция, ключом является 20 байтный адрес, в качестве значения - 4 поля:

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

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


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

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

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

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

Что касается самой архитектуры смарт контрактов: весь высокоуровневый тьюринг-полный код компилируется и приводится к виду байт-кодов, где каждый байт – определенная команда и, выполняется так называемой виртуальной машиной Ethereum, или EVM.

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

PUSH1 0 CALLDATALOAD SLOAD NOT PUSH1 9 JUMPI STOP JUMPDEST PUSH1 32 CALLDATALOAD PUSH1 0 CALLDATALOAD SSTORE

Прерывание выполнение происходит в 3х случаях: ошибка в коде, достижение конца кода и STOP/RETURN оператор в самом коде. 

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

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

(block_state, transaction, message, code, memory, stack, pc, gas), 

где block_state — полное состояние, содержащее информацию о балансах и состояниях хранилищ всех аккаунтов. Каждую итерацию мы берем pc байт, выполняем инструкцию, связанную с этим байтом, и обновляем стек, связанный с выполнением, после чего уменьшает gas на один, и переходит к следующему pc+1 байту-инструкции. Список байт-инструкций можно прочитать, к примеру https://ethereum.stackexchange.com/questions/119/what-opcodes-are-available-for-the-ethereum-evm.   Их более 100, против 80 в биткоине.

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

Но вот на высшем уровне – Ethereum сделало 4 языка, как они называют «контрактно-ориентированных», позволяющих писать смарт-контракты, которые потом будут скомпилированы в байт-код EVM и отправлены в блокчейн. Serpent (похож на Python), Solidity (JavaScript), Mutan (Go) и LLL (Lisp). Самым удобным для разработки считается Solidity благодаря схожести с JavaScript.

Но вот что меня смущает, и тут, конечно, лично мое мнение – зачем было городить свои языки. Понятно, что так проще компилировать их в инструкции в байт-код, но это снижает порог вхождения. Криптовалюты это будущее, но много людей еще даже не разбираются в основах блокчейна, не то, что изучать новый финансовый язык программирования. Гораздо эффективнее было бы сделать что-то на основе уже существующих языков, ведь итак пришлось делать компилятор, который перегоняет тьюринг-полный алгоритм в стек-ориентированный, т.е. по сути парсить и компилиолвать в байт-инструкции исходный код контракта. Почти тоже самое, что делает большинство уже существующих языков. К примеру NEO в этом плане сделал гораздо выгоднее – они сделали свою виртуальную машину, и уже она способна работать с существующими языками. Js, C# и другие просто компилируются в байт коды и отправляются в блокчйн.

 

> Эмиссия и майнинг

Самый скользкий вопрос во всем Эфириуме для меня это вопрос эмиссии. Чем ограничен объем всех монет и их выпуск? Ничем! Думаю, это немного противоречит самой сути экономики и базовым принципам, когда “спрос рождает предложение”, а не наоборот. В данный момент предложение Эфира не ограничено ничем. В сутки добывается около 28 000 монет, при этом нет никакого стопа. Вайтпепер в кратце отвечает на этот вопрос:

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

В общем звучит это так: «ребята, мы не станем ограничивать эмиссию и сделаем вечно растущий поток денег (фраза взята из самого whitepaper), потому что первые майнеры в противном случае получат больше монет, да и инфляция, да и скачки цены, зачем оно вам нужно? Да и 1% в год денег теряется… В общем давайте штамповать монеты бесконечно!». Лично мое мнение – не особо верный подход, в нем теряется вся суть ценности криптовалюты, её стоимости. Она не растет, её всегда можно свободно получить. С другой же стороны, у Эфрирума ценность есть в самой технологии, но базовый принцип так или иначе пододвинут в сторону.


> DAO

Концепция the DAO

Одна из крутых, на мой взгляд, применений технологии Ethereum – децентрализованная организация. Представьте, что у вас есть ООО, которое работает без третьей стороны и позволяет управлять вашей фирмой абсолютно честно и прозрачно. И вот как это выглядит: у каждого участника есть своя доля в этой организации, и любой участник может инициировать голосование на какое-то действие, с помощью смарт-контракта. Лишь при достижении 67% голосов – это решение будет отмечено как «одобрено» и смарт контракт сможет быть выполнен. Кроме того, этим же голосованием можно обновлять код контракта и улучшать его логику. И самое интересное, что свои голоса можно делегировать другому лицу, тем самым можно создать организацию, и делегировать принятие решений на другого человека, тем самым освободив себе время на более важные дела (полежать на пляже, например). К сожалению, знаменитый крах the Dao, приведший сеть к хард-форку кинула тень на эту задумку.

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


> Майнинг и централизация

Я уже много раз писал о том, из-за чего возникает централизация в майнинге. Пулы, производители ASIC устройств, крупные инвесторы, и это всё есть, в какой-то момент пулы переваливали за отметку 51% мощности всей сети. И из-за роста самого блокчейна – держателями полных нод в скором времени останутся только энтузиасты, а так же пулы и крупные бизнесы. Что очень сильно способствует централизации всей криптовалюты.

Whitepaper Ethereum говорит нам о том, что в криптовалюте будет использован другой, более прогрессивный алгоритм майнинга. Он будет гарантировать, что майнеры будут обязаны держать полную ноду сети, что майнинг пулы уйдут в прошлое «в текущем их понимании», а так же не позволит использовать FGPA устройства, проще – ASIC для майнинга.

Что же на деле? На деле текущий PoW алгоритм майнинга Dagger-Hashimoto (Ethash) (планируется, что скоро Ethereum перейдет на новый PoS алгоритм Casper) позволяет уйти от проблемы ASIC из-за большой потребности алгоритма к памяти (что-то около 4гб на данный момент, если не ошибаюсь). Но это всё, потому что остальные пункты из whitepaper не выполняются, данный алгоритм можно встретить на всех крупных пулах, полная нода не нужна, люди повально начали скупать видео-карты, так как данный алгоритм просто замечательно работает с GPU чипами.


Заключение

Фуф, мне показалось, что данная статья получилась довольно большой, даже по сравнению с предыдущими. И это только часть того, что можно рассказать про Ethereum. Если эта статья «зайдет» хотя бы со 100 лайками – я напишу вторую, в которой попытаюсь рассказать простыми словами о том, что из себя представляют обновления эфира, и еще пару особенностей.

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

  • Избавиться от централизации новым майнинг алгоритмом – не получилось, хотя алгоритм и пользуется популярностью и являлся довольно прибыльным даже для тех, кто не в состоянии купить себе 10-20 ASIC устройств (в любом случае выгоднее чем майнить Bitcoin).
  • Сделали отличный, просто замечательный алгоритм состояний, а так же внедрили Тьюринг-полный скриптинг, назвав его контрактами, но зачем-то обернули это в свои, новые языки, заставив программистов учить их языки заного (ну или почти).
  • Сделали отличную криптовалюту, но зачем-то убрали ограничители эмиссии, тем самым позволив криптовалюте штамповать себя по 10 миллионов единиц в год.
  • Зачем-то хотят внедрить PoS, который по факту является менее продвинутой заменой PoW для решения проблемы достижения консенсуса, хотя и говорят о том, что их решение будет лучше, чем PoS алгоритмы, применявшиеся до текущего времени.
  • После бага, который разделил Ethereum, создав Ethereum Classic – люди начали обвинять эту криптовалюту в излишней централизации, ведь хард-форк был сделан вопреки решению всех участников сети. А PoS алгоритм позволит тем, у кого итак много Ethereum влиять на сеть еще в большем объеме, тем самым ЕЩЕ увеличив централизацию.
  • Криптовалюта заявляется как платформа для создания децентрализованных приложений разного рода, а по факту - используется в качестве базы для бесполезных ico, 90% из которых никогда не увидят свет в качестве реального продукта, а, ну еще и про крипто-котиков не забыть.  Да, есть и реальные приложения на базе эфира, не спорю, но их значительно меньше, чем ERC20-ERC23 токенов.


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


Написанное выше является личной точкой зрения авторов и не склоняет вас к покупке или продаже того или иного актива. 


Автор @coinreview


Источники

Ethereum whitepaper

Ethereum whitepaper ru

История криптовалюты

Dev tutorial

State tree overview

Деревья в эфире

Список opcode


Report Page