◊ ОТСУТСТВИЕ ПРОМЕЖУТОЧНЫХ СОСТОЯНИЙ. UTXO можно либо потратить, либо не потратить; невозможно создать контракт или скрипт для какого-то промежуточного состояния. Это затрудняет заключение многоуровневых контрактов с опциями, создание предложений децентрализованного обмена или двухэтапных протоколов криптографического соглашения (необходимых для безопасности вознаграждений за решение той или иной вычислительной задачи). Также это значит, что UTXO может использоваться для простых моментально исполняющихся контрактов, но никак не для более сложных контрактов «с отслеживанием состояния» вроде децентрализованных организаций. По этой же причине становится трудно внедрять метапротоколы. Бинарность состояния в сочетании с финансовой слепотой также приводит к невозможности задать предельное значение суммы, которую можно снять с кошелька.
◊ БЛОКЧЕЙН-СЛЕПОТА. UTXO не видит информацию блокчейна о временной метке, одноразовом коде и хеше предыдущего блока. Это сильно ограничивает его применение в азартных играх и некоторых других категориях, лишая скриптовый язык потенциально ценного источника случайных величин.
Таким образом, мы видим три подхода к разработке более продвинутых приложений на базе криптовалюты: создать новый блокчейн, использовать скриптовый язык поверх Bitcoin и создать метапротокол поверх Bitcoin. Создание нового блокчейна предоставляет неограниченную свободу творчества, но ради этого придется потратить очень много времени на разработку, бутстрэппинг и безопасность. Вариант со скриптовым языком намного проще внедрить и стандартизировать, но он крайне ограничен в возможностях. В свою очередь метапротоколы, хоть и тоже простые, трудно масштабировать. В Ethereum мы хотим создать альтернативный фреймворк, который еще эффективней использует простоту разработки, а также усилит свойства легкого клиента и в то же время позволит приложениям пользоваться экономической средой и безопасностью блокчейна.
ETHEREUM
Цель Ethereum – представить альтернативный протокол для создания децентрализованных приложений, обеспечив компромиссы, которые, как нам кажется, будут очень полезны для большого класса децентрализованных приложений, с особым акцентом на обстоятельства, где важны быстрая разработка, безопасность для маленьких и редко используемых приложений и возможность эффективного взаимодействия разных приложений. Для этого Ethereum создает предельно базовую платформу – блокчейн со встроенным полным по Тьюрингу языком программирования, позволяющим любому желающему писать смарт-контракты и децентрализованные приложения, где каждый может создавать собственные произвольные правила владения, форматы транзакций и произвольные функции изменения состояния. В простейшей форме реализация идеи известной криптовалюты Namecoin на этом языке занимает две строки кода, а протоколы валют и систем репутации можно реализовать менее чем в двадцать строк. Смарт-контракты – криптографические «коробки», содержащие значение и открывающиеся только при определенных условиях, – также могут быть построены поверх платформы Ethereum, причем со значительно большей функциональностью, чем в скриптовом языке Bitcoin. Это возможно благодаря полному по Тьюрингу языку Ethereum, его финансовой «зрячести», блокчейн-«зрячести» и наличию промежуточных состояний.
АККАУНТЫ ETHEREUM
В Ethereum состояние состоит из объектов под названием «аккаунты»; каждому аккаунту соответствует 20-байтовый адрес. Функции изменения состояния – переводы валюты или информации между аккаунтами. Ethereum-аккаунт содержит четыре поля:
◊ ОДНОРАЗОВЫЙ КОД – счетчик, необходимый для того, чтобы каждая транзакция произошла ровно один раз;
◊ текущий БАЛАНС ЭФИРА, принадлежащего аккаунту;
◊ КОД КОНТРАКТА, связанного с аккаунтом, если контракт есть;
◊ ХРАНИЛИЩЕ аккаунта (пустое по умолчанию).
Эфир – главное внутреннее «криптотопливо» Ethereum, он же используется для уплаты комиссий. Возможны два способа ведения аккаунтов: аккаунт с внешним владением, контролируемый приватным ключом, и контракт-аккаунт, контролируемый кодом связанного с ним контракта. Первый способ не подразумевает кода, в нем можно пересылать сообщения, создавая и подписывая транзакцию. В случае контракт-аккаунта его код активируется каждый раз, когда аккаунт получает входящее сообщение, что позволяет ему писать в хранилище и считывать оттуда информацию, посылать другие сообщения и создавать другие контракты.
Стоит подчеркнуть, что «контракты» в Ethereum не следует рассматривать как нечто, что должно быть «выполнено» или «соблюдено»; скорее они больше похожи на «автономных агентов», которые живут внутри среды выполнения Ethereum, всегда выполняя определенный фрагмент кода, когда к этому «подталкивает» сообщение или транзакция. Также у них есть прямой контроль над собственным балансом и собственным хранилищем ключей/ценностей для отслеживания постоянных переменных.
СООБЩЕНИЯ И ТРАНЗАКЦИИ
Термин «транзакция» в Ethereum означает подписанный пакет данных, содержащий сообщение, которое должно быть отправлено в подконтрольный владельцу аккаунт. Транзакции включают в себя:
◊ получателя;
◊ электронную подпись отправителя;
◊ количество эфира, пересылаемого отправителем получателю.
◊ пересылаемые данные (опционально);
◊ переменную STARTGAS, означающую предел количества вычислительных шагов, возможных для осуществления транзакции;