self.storage[name] = value
Контракт крайне прост: это всего лишь информация о том, что базу данных внутри сети Ethereum можно пополнить, но нельзя ее редактировать или что-либо из нее удалять. Каждый может зарегистрировать имя, навсегда присвоив ему некоторое значение. Более сложный контракт регистрации имени будет также содержать «функцию условия», позволяющую другим контрактам обращаться к нему с запросами, а также интерфейс, позволяющий «владельцу» (то есть первому, кто зарегистрировал имя) изменять данные или передавать право на контракт другому лицу. Более того, поверх можно добавить даже функционал репутаций и web-of-trust.
ДЕЦЕНТРАЛИЗОВАННОЕ ХРАНЕНИЕ ФАЙЛОВ
В последние годы появилось немало стартапов, связанных с онлайн-хранением файлов. Самый известный – Dropbox, предлагающий пользователям загружать и хранить резервную копию своего жесткого диска на отдельном сервере, доступ к которому будет открыт за ежемесячную плату. Однако неэффективность рынка хранения данных заметна невооруженным глазом; «зловещая долина» с пространством в 20–200 гигабайт, где нет ни бесплатных аккаунтов, ни скидок для бизнеса, требует за один лишь месяц хранения файлов больше, чем стоит полноценный жесткий диск. Контракты Ethereum могут развить экосистему децентрализованного хранения файлов, позволяя всем желающим зарабатывать небольшие суммы сдачей в аренду собственных жестких дисков, и неиспользуемое дисковое пространство поможет в дальнейшем снижать стоимость хранения файлов.
В основе здесь лежит то, что мы назвали «децентрализованным Dropbox-контрактом», и работает он следующим образом. Сначала информация разбивается на блоки, для конфиденциальности каждый блок шифруется, и для каждого строится дерево Меркла.
Создается новый контракт, устанавливающий, что каждые n блоков он будет брать случайный индекс в дереве Меркла (используя хеш предыдущего блока как источник случайных чисел) и переводить х эфира первому, кто предъявит SVP-подобное доказательство владения блоком под этим индексом. Когда пользователь захочет повторно скачать свой файл, он может использовать протокол микроплатежей (выплачивая, к примеру, 1 сабо за каждые 32 килобайта); при этом плательщик сможет сэкономить на комиссии, если будет не запрашивать по первой цене весь файл, а публиковать транзакции с тем же одноразовым кодом каждые 32 килобайта, предлагая каждый раз чуть меньшую цену.
Этот протокол особенно ценен тем, что, хотя сохранность файла и кажется зависимой от большого количества случайных нод, риски можно свести практически к нулю, разделив файл на множество частей с помощью технологии разделения секрета и наблюдая за хранением этих кусочков. Если выплаты по контракту продолжаются, это криптографически доказывает, что нода продолжает хранить файл.
ДЕЦЕНТРАЛИЗОВАННЫЕ АВТОНОМНЫЕ ОРГАНИЗАЦИИ
Децентрализованная автономная организация (ДАО) – виртуальный объект, состоящий из конкретных членов или акционеров, где определенная часть членов, скажем, 67 %, могут согласовать решения о трате средств из общего фонда и модификации кода. Члены коллективно решают, как организация должна распределять свои средства. Методы распределения могут быть самые разные: от зарплат и премий до более оригинальных механизмов вроде вознаграждений во внутренней валюте.
ДАО напоминают обычные компании или некоммерческие организации, только решения здесь принимаются через криптографические блокчейн-технологии. До этого момента бóльшая часть разговоров о ДАО касалась «капиталистической» модели «децентрализованных автономных корпораций» (ДАК) с выплачиваемыми акционерам дивидендами и свободно торгующимися акциями. Есть и альтернатива, которую можно назвать «децентрализованным автономным сообществом», где голоса всех членов равноправны и для добавления/исключения члена потребуется согласие 67 % текущих членов. В этом случае необходимо убедиться, что одному человеку может принадлежать только одно членство.
В простейшем виде ДАО представляет собой код, способный вносить в себя изменение, одобренное двумя третями членов. Хотя теоретически код неизменен, это правило можно легко обойти и достигнуть изменяемости де-факто, храня фрагменты кода в разных контрактах, а информацию о том, какие фрагменты вызывать, – в изменяющемся хранилище контракта. В простейшей реализации такого ДАО-контракта есть три типа транзакций, которые различаются по предоставленным данным.
◊ [0,i,K,V] – регистрирует предложение с индексом i заменить адрес в хранилище под индексом K на значение V.
◊ [1,i] – регистрирует голос в поддержку предложения.i
◊ [2,i] – принимает предложение i, если для этого набрано достаточно голосов.