Что такое dao: Data Access Object (DAO). Уровень класса / Хабр

Содержание

Паттерн Data Access Object — JavaTutor.net

1 Контекст
2 Проблема
3 Ограничения
4 Решение
     4.1 Структура
     4.2 Участники и обязанности
         4.2.1 BusinessObject
         4.2.2 DataAccessObject
         4.2.3 DataSource
         4.2.4 TransferObject
     4.3 Стратегии
         4.3.1 Стратегия Automatic DAO Code Generation
         4.3.2 Стратегия Factory for Data Access Objects
5 Выводы
6 Примеры
     6.1 Реализация паттерна Data Access Object
     6.2 Реализация стратегии Factory for Data Access Objects
         6.2.1 Использование паттерна Factory Method
         6.2.2 Использование паттерна Abstract Factory
         6.2.3 Пример 9.1 Абстрактный класс DAOFactory
         6.2.4 Пример 9.2 Конкретная реализация DAOFactory для Cloudscape
         6.2.5 Пример 9.3 Базовый DAO-интерфейс для Customer
         6.2.6 Пример 9.4 Реализация Cloudscape DAO для Customer
         6.2.7 Пример 9.5 Customer Transfer Object
         6.2.8 Пример 9.6 Использование DAO и DAO-генератора — код клиента
7 Связанные паттерны

1 Контекст

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

2 Проблема

Многие реальные приложения платформы Java 2 Platform, Enterprise Edition (J2EE) должны использовать на некотором этапе персистентные данные. Для этих приложений персистентное хранение реализуется различными механизмами и существуют значительные отличия в API, используемых для доступа к этим механизмам. Другим приложениям может понадобиться доступ к данным, расположенным на разных системах. Например, данные могут находиться на мэйнфреймах, LDAP-репозиториях (Lightweight Directory Access Protocol — облегченный протокол доступа к каталогам) и т.д. Другим примером является ситуация, когда данные предоставляются службами, выполняющимися на разных внешних системах, таких как системы business-to-business (B2B), системы обслуживания кредитных карт и др.

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

Для доступа к данным, расположенным в системе управления реляционными базами данных (RDBMS), приложения могут использовать JDBC API. JDBC API предоставляет стандартный механизм доступа и управления данными в персистентном хранилище, таком как реляционная база данных. JDBC API позволяет в J2EE-приложениях использовать SQL-команды, являющиеся стандартным средством доступа к RDBMS-таблицам. Однако, даже внутри среды RDBMS фактический синтаксис и формат SQL-команд может сильно зависеть от конкретной базы данных.

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

3 Ограничения

  • Компоненты управления данными с управляемой компонентом персистенцией, сессионные компоненты, сервлеты и другие объекты, такие как вспомогательные объекты для JSP-страниц, должны получать и сохранять информацию в персистентных хранилищах и других источниках данных, например традиционных системах, B2B, LDAP и т.д.

  • API доступа к персистентному хранилищу данных может зависеть от поставщика продукта. Другие источники данных могут иметь нестандартные или патентованные API. Эти API и их возможности зависят от типа хранилища данных — RDBMS, система управления объектно-ориентированными базами данных (OODBMS), XML-документы, плоские файлы и т.д. Унифицированный API доступа к этим несовместимым системам отсутствует.

  • Для извлечения или сохранения данных во внешних и/или традиционных системах компоненты обычно используют патентованные API.

  • Включение в компоненты специфических механизмов доступа и API прямо влияет на переносимость компонентов.

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

4 Решение

Используйте Data Access Object (DAO) для абстрагирования и инкапсулирования доступа к источнику данных. DAO управляет соединением с источником данных для получения и записи данных.

DAO реализует необходимый для работы с источником данных механизм доступа. Источником данных может быть персистентное хранилище (например, RDBMS), внешняя служба (например, B2B-биржа), репозиторий (LDAP-база данных), или бизнес-служба, обращение к которой осуществляется при помощи протокола CORBA Internet Inter-ORB Protocol (IIOP) или низкоуровневых сокетов. Использующие DAO бизнес-компоненты работают с более простым интерфейсом, предоставляемым объектом DAO своим клиентам. DAO полностью скрывает детали реализации источника данных от клиентов. Поскольку при изменениях реализации источника данных представляемый DAO интерфейс не изменяется, этот паттерн дает возможность DAO принимать различные схемы хранилищ без влияния на клиенты или бизнес-компоненты. По существу, DAO выполняет функцию адаптера между компонентом и источником данных.

4.1 Структура

На рисунке 9.1 показана диаграмма классов, представляющая взаимоотношения в паттерне DAO.

4.2 Участники и обязанности

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

4.2.1 BusinessObject

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

4.2.2 DataAccessObject

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

4.2.3 DataSource

Представляет реализацию источника данных. Источником данных может быть база данных, например, RDBMS, OODBMS, XML-репозиторий, система плоских файлов и др. Источником данных может быть также другая система (традиционная/мэйнфрейм), служба (B2B-служба или система обслуживания кредитных карт), или какой-либо репозиторий (LDAP).

4.2.4 TransferObject

Представляет собой Transfer Object, используемый для передачи данных. DataAccessObject может использовать Transfer Object для возврата данных клиенту. DataAccessObject может также принимать данные от клиента в объекте Transfer Object для их обновления в источнике данных.

4.3 Стратегии

4.3.1 Стратегия Automatic DAO Code Generation

Поскольку BusinessObject соответствует конкретному DAO, есть возможность установить взаимоотношения между BusinessObject, DAO, и применяемыми реализациями (таблицы в RDBMS). После установления взаимоотношений появляется возможность написать простую утилиту для генерации кода, зависящую от приложения, которая может генерировать код для всех нужных приложению объектов DAO. Метаданные для генерации DAO могут определяться разработчиком в файле-дескрипторе. В качестве альтернативы генератор кода может автоматически проанализировать базу данных и предоставить необходимые для доступа к ней объекты DAO. Если требования к DAO являются достаточно сложными, можно использовать интсрументальные средства сторонних производителей, обеспечивающие отображение «объектный-реляционный» для баз данных RDBMS. Такие средства обычно имеют GUI-интерфейс для отображения бизнес-объектов в объекты персистентного хранилища и определяют промежуточные объекты DAO. Инструментальные средства автоматически генерируют код после завершения отображения и могут предоставлять другие ценные функции, например, кэширование результатов, кэширование запросов, интеграция с серверами приложений, интеграция с другими сторонними продуктами (например, распределенное кэширование) и т.д.

4.3.2 Стратегия Factory for Data Access Objects

Паттерн DAO может быть сделан очень гибким при использовании паттернов Abstract Factory [GoF] и Factory Method [GoF] (см. секцию «Связанные паттерны» в этом разделе).

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

Рисунок 9.3 Стратегия Factory for Data Access Object, использующая Factory Method

Когда используемое хранилище данных может измениться при переходе от одной реализации к другой, данная стратегия может быть реализована с применением паттерна Abstract Factory. Abstract Factory, в свою очередь, может создать и использовать реализацию Factory Method implementation, как рекомендуется в книге «Паттерны проектирования: Элементы повторно используемого объектно-ориентированного программного обеспечения»

[GoF]. В этом случае данная стратегия предоставляет абстрактный объект генератора DAO (Abstract Factory), который может создавать конкретные генераторы DAO различного типа, причем каждый генератор может поддерживать различные типы реализаций персистентных хранилищ данных. После получения конкретного генератора для конкретной реализации вы можете использовать его для генерации объектов DAO, поддерживаемых и реализуемых в этой реализации.

Диаграмма классов этой стратегии представлена на рисунке 9.4. Эта диаграмма классов показывает базовый генератор DAO, являющийся абстрактным классом, который наследуется и реализуется различными конкретными генераторами DAO для поддержки доступа к специфической реализации хранилища данных. Клиент может получить реализацию конкретного генератора DAO, например RdbDAOFactory, и использовать его для получения конкретных объектов DAO, работающих с этой конкретной реализацией хранилища данных. Например, клиент может получить RdbDAOFactory и использовать его для получения конкретных DAO, таких как RdbCustomerDAO, RdbAccountDAO и др. Объекты DAO могут расширять и реализовывать общий базовый класс (показанные как DAO1 и DAO2) и детально описывать требования к DAO для поддерживаемых бизнес-объектов. Каждый конкретный объект DAO отвечает за соединение с источником данных и за получение и управление данными для поддерживаемого им бизнес-объекта.

Пример реализации паттерна DAO и его стратегий приведен в секции «Пример» данного раздела.

Диаграмма последовательности действий, описывающая взаимодействия для этой стратегии, представлена на рисунке 9.5.

5 Выводы

  • Разрешает прозрачность

    Бизнес-объекты могут использовать источник данных, не имея знаний о конкретных деталях его реализации. Доступ является прозрачным, поскольку детали реализации скрыты внутри DAO.

  • Облегчает миграцию

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

  • Уменьшает сложность кода в бизнес-объектах

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

  • Централизует весь доступ к данным в отдельном уровне

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

  • Бесполезна для управляемой контейнером персистенции

    Поскольку EJB-контейнер управляет компонентами с управляемой контейнером персистенцией (CMP — container-managed persistence), контейнер автоматически обслуживает весь доступ к хранилищу данных. Приложения, использующие компоненты управления данными этого типа, не нуждаются в уровне объектов DAO, поскольку сервер приложений обеспечивает эту функциональность. Однако, объекты DAO остаются полезны в случаях, когда необходимо использовать комбинацию CMP (для компонентов управления данными) и BMP (для сессионных компонентов, сервлетов).

  • Добавляет дополнительный уровень

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

  • Требуется разработка иерархии классов

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

6 Примеры

6.1 Реализация паттерна Data Access Object

Код объекта DAO для персистентного объекта, предоставляющего информацию о клиенте (Customer), представлен в примере 9.4. CloudscapeCustomerDAO создает объект Customer Transfer Object при вызове метода findCustomer().

Код, использующий DAO, показан в примере 9.6. Диаграмма классов этого примера приведена на рисунке 9.6.

6.2 Реализация стратегии Factory for Data Access Objects

6.2.1 Использование паттерна Factory Method

Рассмотрим пример, в котором мы применяем данную стратегию для создания генератором многих объектов DAO для одной реализации базы данных (например, Oracle). Генератор производит такие объекты DAO, как CustomerDAO, AccountDAO, OrderDAO и др. Диаграмма классов для этого примера приведена на рисунке 9.7.

Рисунок 9.7 Реализация стратегии Factory for DAO, использующей Factory Method

Код генератора DAO (CloudscapeDAOFactory) приведен в примере 9.2.

6.2.2 Использование паттерна Abstract Factory

Рассмотрим пример, в котором мы применяем данную стратегию для трех различных баз данных. В этом случае может быть использован паттерн Abstract Factory. Диаграмма классов этого примера показана на рисунке 9.8. Код в примере 9.1 показывает фрагмент абстрактного класса DAOFactory. Этот генератор производит такие объекты DAO как CustomerDAO, AccountDAO, OrderDAO и др. Данная стратегия использует реализацию Factory Method в генераторах, созданных при помощи Abstract Factory.

Рисунок 9.8 Реализация стратегии Factory for DAO, использующей Abstract Factory

6.2.3 Пример 9.1 Абстрактный класс DAOFactory

// Абстрактный класс DAO Factory
public abstract class DAOFactory {

 

// Список типов DAO, поддерживаемых генератором
  public static final int CLOUDSCAPE = 1;
  public static final int ORACLE = 2;
  public static final int SYBASE = 3;
  ...

 

// Здесь будет метод для каждого DAO, который может быть
  // создан. Реализовывать эти методы
  // должны конкретные генераторы.
  public abstract CustomerDAO getCustomerDAO();
  public abstract AccountDAO getAccountDAO();
  public abstract OrderDAO getOrderDAO();
  ...

 

public static DAOFactory getDAOFactory(
      int whichFactory) {
 
    switch (whichFactory) {
      case CLOUDSCAPE:
          return new CloudscapeDAOFactory();
      case ORACLE    :
          return new OracleDAOFactory();     
      case SYBASE    :
          return new SybaseDAOFactory();
      ...
      default           :
          return null;
    }
  }
}

Код CloudscapeDAOFactory приведен в примере 9.2. Реализации OracleDAOFactory и SybaseDAOFactory аналогичны, за исключением особенностей каждой реализации, таких как JDBC-драйвер, URL базы данных и различий в синтаксисе SQL, если таковые имеются.

6.2.4 Пример 9.2 Конкретная реализация DAOFactory для Cloudscape
// Конкретная реализация DAOFactory  для Cloudscape
import java.sql.*;public class CloudscapeDAOFactory extends DAOFactory {
  public static final String DRIVER=
    "COM.cloudscape.core.RmiJdbcDriver";
  public static final String DBURL=
    "jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB";

 

// метод для создания соединений к Cloudscape
  public static Connection createConnection() {
    // Использовать DRIVER и DBURL для создания соединения
    // Рекомендовать реализацию/использование пула соединений
  }
  public CustomerDAO getCustomerDAO() {
    // CloudscapeCustomerDAO реализует CustomerDAO
    return new CloudscapeCustomerDAO();
  }
  public AccountDAO getAccountDAO() {
    // CloudscapeAccountDAO реализует AccountDAO
    return new CloudscapeAccountDAO();
  }
  public OrderDAO getOrderDAO() {
    // CloudscapeOrderDAO реализует OrderDAO
    return new CloudscapeOrderDAO();
  }
  ...
}

Интерфейс CustomerDAO, показанный в примере 9.3, определяет DAO-методы для персистентного объекта Customer, которые реализованы всеми конкретными реализациями DAO, такими как, CloudscapeCustomerDAO, OracleCustomerDAO и SybaseCustomerDAO. Аналогично (но здесь не приводится) реализуются интерфейсы AccountDAO и OrderDAO, определяющие DAO-методы соответственно для бизнес-объектов Account и Order.

6.2.5 Пример 9.3 Базовый DAO-интерфейс для Customer

// Интерфейс, который должны поддерживать все CustomerDAO
public interface CustomerDAO {
  public int insertCustomer(...);
  public boolean deleteCustomer(...);
  public Customer findCustomer(...);
  public boolean updateCustomer(...);
  public RowSet selectCustomersRS(...);
  public Collection selectCustomersTO(...);
  ...
}

CloudscapeCustomerDAO реализует CustomerDAO, как показаго в примере 9.4. Реализации других объектов DAO, таких как CloudscapeAccountDAO, CloudscapeOrderDAO, OracleCustomerDAO, OracleAccountDAO, и т.д. — аналогичны.

6.2.6 Пример 9.4 Реализация Cloudscape DAO для Customer
// Реализация CloudscapeCustomerDAO
// интерфейса CustomerDAO. Этот класс может содержать весь
// специфичный для Cloudscape код и SQL-команды.
// Клиент, таким образом, защищается от необходимости
// знать эти детали реализации.import java.sql.*;public class CloudscapeCustomerDAO implements
    CustomerDAO {
 
  public CloudscapeCustomerDAO() {
    // инициализация
  }

 

// Следующие методы по необходимости могут использовать
  // CloudscapeDAOFactory.createConnection()
  // для получения соединения

 

public int insertCustomer(...) {
    // Реализовать здесь операцию добавления клиента.
    // Возвратить номер созданного клиента
    // или -1 при ошибке
  }
 
  public boolean deleteCustomer(...) {
    // Реализовать здесь операцию удаления клиента.
    // Возвратить true при успешном выполнении, false при ошибке
  }

 

public Customer findCustomer(...) {
    // Реализовать здесь операцию поиска клиента, используя
    // предоставленные значения аргументов в качестве критерия поиска.
    // Возвратить объект Transfer Object при успешном поиске,
    // null или ошибку, если клиент не найден.
  }

 

public boolean updateCustomer(...) {
    // Реализовать здесь операцию обновления записи,
    // используя данные из customerData Transfer Object
    // Возвратить true при успешном выполнении, false при ошибке
  }

 

public RowSet selectCustomersRS(...) {
    // Реализовать здесь операцию выбора клиентов,
    // используя предоставленный критерий.
    // Возвратить RowSet.
  }

 

public Collection selectCustomersTO(...) {
    // Реализовать здесь операцию выбора клиентов,
    // используя предоставленный критерий.
    // В качестве альтернативы, реализовать возврат
    // коллекции объектов Transfer Object.
  }
  ...
}

Класс Customer Transfer Object показан в примере 9.5. Он используется объектами DAO для передачи и приема данных от клиентов. Использование объектов Transfer Object детально рассматривалось в паттерне Transfer Object.

6.2.7 Пример 9.5 Customer Transfer Object
public class Customer implements java.io.Serializable {
  // переменные-члены
  int CustomerNumber;
  String name;
  String streetAddress;
  String city;
  ...

 

// методы getter и setter...
  ...
}

В примере 9.6 показано использование генератора DAO и DAO. Если реализация меняется от Cloudscape к другому продукту, необходимо изменить только вызов метода getDAOFactory() в генераторе DAO для получения другого генератора.

6.2.8 Пример 9.6 Использование DAO и DAO-генератора — код клиента
...
// создать требуемый генератор DAO
DAOFactory cloudscapeFactory =  
  DAOFactory.getDAOFactory(DAOFactory.DAOCLOUDSCAPE);// Создать DAO
CustomerDAO custDAO =
  cloudscapeFactory.getCustomerDAO();// создать нового клиента
int newCustNo = custDAO.insertCustomer(...);// найти объект customer. Получить объект Transfer Object.
Customer cust = custDAO.findCustomer(...);// изменить значения в Transfer Object.
cust.setAddress(...);
cust.setEmail(...);
// обновить объект customer, используя DAO
custDAO.updateCustomer(cust);// удалить объект customer
custDAO.deleteCustomer(...);
// выбрать всех клиентов одного города
Customer criteria=new Customer();
criteria.setCity("New York");
Collection customersList =
  custDAO.selectCustomersTO(criteria);
// возвратить customersList - коллекцию объектов Customer
// Transfer Objects. Проходит по коллекции для
// получения значений....

7 Связанные паттерны

  • Transfer Object

    DAO использует Transfer Objects для передачи данных клиентам и от них.

  • Factory Method [GoF] и Abstract Factory [GoF]

    Стратегия Factory for Data Access Objects использует паттерн Factory Method для реализации конкретных генераторов и их продуктов (объектов DAO). Для дополнительной гибкости, в стратегиях может быть применен паттерн Abstract Factory, как рассматривалось выше.

  • Broker [POSA1]

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

Что такое DAO и какова печальная история самого крупного ICO по этой модели

DAO (децентрализованная автономная организация) — это сложная форма смарт- контракта, в котором правила децентрализованной организации записан в в код контракта, а управление происходит через токены.

Как следует из названия, DAO — это организация, которая работает автономно и децентрализовано. Идея существует уже довольно давно. Сеть биткоина считается первой по-настоящему автономной корпорацией, работа которой координируется исключительно с помощью распределенного консенсуса, в котором может участвовать любой человек.

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

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

Для визуализации DAO есть хороший пример от Майка Хирна, бывшего разработчика и евангелиста биткоина.

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

Именно так работают DAO. Они программируются изначально и после этого работают автономно, строго исполняя свои функции.

Зачем создаются DAO?

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

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

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

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

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

Проблемы с DAO

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

Есть еще несколько важных проблем, о которых мы расскажем в следующей статье.

История The DAO

The DAO было запущено в 2016 году в сети Ethereum и, к сожалению, провалилось.

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

Проект хотел улучшить нынешнее управление несколькими способами: чтобы токены DAO были доступны для всех и чтобы каждый мог голосовать по правилам.

Но DAO взломали, и это привело к потере средств и падению цены на ETH. Проблема была в коде проекта, но это затронуло и репутацию Ethereum. Большое количество Эфира, которое подняли на токенсейле, пропало, и это подорвало доверие к сети.

На ICO было собрано 150 млн долларов, а участвовало в нем 11000 человек. Это было действительно грандиозное событие.

Уязвимость в коде была обнаружена, и ее пытались исправить. Но пока команда работала над устранением проблемы, неизвестный злоумышленник использовал ошибку, чтобы вывести собранные деньги. Ему удалось увести более 3,6 миллиона ETH в токенах DAO. Этот взлом был возможен с помощью повторного вызова.

Подробнее про уязвимости смарт-контрактов 

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

Так появился Ethereum после хардфорка, который является основным, и Ethereum Classic. Сторонники ETC считают, что «код является законом» и нельзя отменять то, что случилось.

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

Что такое The DAO и как он стал крупнейшим краудфандинговым проектом в истории

В предыдущей части серии статей, посвященных проектам Виталика Бутерина, мы рассказали о том, как Ethereum вышел на передовую мира блокчейн. В этом выпуске поговорим о крупнейшем на сегодняшний день краудфандинговом проекте — «The DAO»: Decentralized Autonomous Organization (децентрализованная автономная организация), собравшем более 150 млн долларов США. Что такое The DAO? Что делает его столь популярным? Как работает The DAO? Почему в блокчейн-сообществе нет единого мнения по поводу успешности проекта? Все это вы найдете далее.

Несмотря на то, что идея The DAO направлена на эффективное использование преимуществ краудфандинга, сам проект не является очередной краудфандинговой платформой. The DAO позиционирует себя как организацию, которая базируется на облачном коде, не является юридическим лицом и управляется коллективно всеми ее инвесторами (по сути, «гигантским комитетом гиков»). В традиционном понимании такая организация ничего не создает и не нанимает сотрудников. Группа разработчиков из Slock.it и основной команды Ethereum представила новую разработку, впервые в истории позволившую создавать организации, участники которых могут прямо и в реальном времени контролировать инвестированные средства, а правила управления формализуются и претворяются в жизнь с помощью автоматизированных программ.

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

The DAO закрыта и сама управляет собой: ее программный код осуществляет свою деятельность автономно, а внутренние правила являются неотъемлемой и неизменяемой частью Ethereum-блокчейна. Основной деятельностью организации является объединение единомышленников с целью совместной работы над проектами и достижения тех или иных целей. Участники могут быть совершенно незнакомы в реальной жизни, однако, объединившись в рамках The DAO, они могут вместе сделать что-то значимое. И незнакомцы действительно собрались вместе: более 20 тыс. инвесторов уже «подкинули дров», вложив в The DAO в общей сложности более 150 млн долларов.

Что делает The DAO столь интересной?


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

Согласно Slock.it, The DAO обладает 4 характеристиками.

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

Во-вторых, The DAO — гибкая структура. Это проявляется в том, что принцип работы организации позволяет поддерживать предложения любого характера, будь то создание полезного для нее продукта, вложение средств в венчурные проекты для получения прибыли или их направление на благотворительные нужды (спасение китов уже предложено). Участники могут проголосовать за выделение средств на предложения инновационного характера, дальнейшая практическая реализация которых ляжет на плечи привлекаемых исполнителей.

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

Другой замечательной особенностью The DAO является справедливая децентрализованная модель управления. Команда Slock.it обещает, что находящиеся в собственности The DAO Ethereum-токены никогда не будут управляться централизованно. Обладатели DAO-токенов имеют право голоса в ходе принятия важных решений, связанных с управлением организацией или проектами, включая возможность перераспределения ETH среди участников.

Как работает The DAO


Операционная модель The DAO состоит из 4 стадий: предложение, голосование, разработка и практическое внедрение.

Для начала любой владелец DAO-токена может внести предложение, где укажет количество ETH, которое потребуется для разработки того или иного продукта или услуги. Предложение также определяет уровень контроля за полномочиями, которыми The DAO должна наделить потенциальных подрядчиков.

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

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

Цель предложения указывается в его описании. В случае создания продукта или услуги, требующих оплаты за их использование, после запуска проекта The DAO будет взимать с клиентов оплату и использовать заработанные ETH по усмотрению сообщества.

Критика проекта


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

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

Более того, широкий успех DAO во многом зависит от того, сможет ли ETH стать популярным средством оплаты продуктов и услуг. Независимо от степени автономности, The DAO придется, так или иначе, привлекать к работе сторонние организации, ведущие свои финансовые дела в традиционных валютах. Оплата их услуг будет требовать конвертации ETH-токенов, что, безусловно, создаст для организации некоторые дополнительные неудобства в общении с остальными миром.

Тим Суонсон, директор по рыночным исследованиям R3CEV, поделился интересными мыслями на тему недостатков The DAO:

«… The DAO, по сути, является инвестиционным фондом. Однако многие люди рассматривают ее, как лежащее на самом дне океана, набитое золотом хранилище, ценность которого каким-то неведомым образом должна однажды вырасти, а они, в свою очередь, должны извлечь из этого выгоду.

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


Суонсон также задает резонные вопросы: «Будет ли DAO прибыльным активом для его инвесторов в первое время своего существования? Что произойдет, когда владельцы и получатели средств организации столкнутся с проблемами правового регулирования ее деятельности?».

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

«Как вообще участники The DAO собираются проводить анализ предложений и проверку биографий программистов и предпринимателей, от которых они поступили? Как будет проходить обсуждение решений? Конечно, у вас есть форумы или Slack, но как из всего этого шума, создваемого несколькими сотнями или тысячами человек выделить по-настоящему ценные идеи?…

… От России и Китая до США, хакеры и мошенники самых разных мастей постараются оттяпать свою часть этого лакомого куска».


Многие комментаторы признают риски, связанные с теневым правовым положением The DAO, а также вероятность того, что недавний сбор средств на проект может негативно повлиять на стоимость ETH:
«Как только держатели DAO токенов получат возможность обменять их обратно на Ether [подорожавший во многом из-за шумихи вокруг этого краудфандинга], стоимость ETH резко упадет», — говорит Джозеф Ли, владелец лондонской торговой биткоин-площадки Magnr.

Другое мнение, принадлежащее Дэну Ларимеру, техническому директору Steemit:
«Теоретическая концепция совместного решения в рамках The DAO еще столкнется с реальностью в виде личных интересов участников, а также политических и экономических препятствий. Как только люди начнут понимать, что эта затея приносит им больше убытков, нежели прибыли, многие из них начнут покидать проект.

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


Еще один противоречивый момент — уровень кворума в 20% голосов. Джонатан Честер, основатель и президент Bitwage, ставит эту идею под сомнение: «Что же случится, если 20% кворум никогда не будет достигнут, и инвесторы The DAO будут настолько разобщены, что не смогут договориться даже о снижении обязательного минимума голосов?»

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

А как вы считаете, удастся ли The DAO осуществить свои амбициозные планы?

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

Захватывающая история The DAO: работа над ошибками

17 июня 2016 года произошла, пожалуй, самая масштабная атака за всю историю криптоиндустрии — из-за ошибки в коде перспективный и очень популярный в то время проект The DAO лишился более 60 миллионов долларов. 

Журнал ForkLog решил вспомнить эту дату и попытаться проанализировать, к чему привело это событие.

Немного предыстории

На заре ICO, то есть всего-то около года назад — 28 мая 2016, закончилась распродажа токенов проекта по децентрализованному управлению инвестициями The DAO, который основала команда стартапа Slock.it.

До поры до времени у The DAO дела шли очень хорошо: и сообщество проект полюбило, и Виталик Бутерин стоял за него горой, и краудсейл прошел, мягко говоря, успешно — собрали более 12 миллионов ETH, что на тот момент составляло около 165 миллионов долларов (сегодня — более 4,3 миллиарда долларов!).

13 июня 2016 года, за несколько дней до взлома, журнал Forklog писал:

«за последние сутки The DAO вырос в стоимости почти на 16% по отношению к доллару ($ 0,158) и более чем на 5% по отношению к ETH (0.000228)». (Для справки: биткоин тогда стоил 695 долларов).

Что-то пошло не так…

Однако буквально за неделю до краха The DAO редакция нашего журнала опубликовала несколько занимательных материалов, которые напрямую рассказывали о возможных уязвимостях проекта. Это «Атаки Влада: обзор основных уязвимостей The DAO» и интервью со Стефаном Туалем, сооснователем и операционным директором стартапа Slock.it, который как раз занимался созданием инвестиционного фонда The DAO.

В разговоре с Туалем годичной давности ForkLog интересовался тем, насколько оправданы опасения сообщества насчет возможных атак на проект. Оценивая содержание этого текста сейчас, можно сказать, что команда Slock.it отнеслась несерьезно и к возможным уязвимостям, и даже к честному разговору о них.

«Я спокоен по поводу будущего The DAO. Все произошедшие события сделали его самым большим проектом в истории, финансируемым за счет краудфандинга, и по сути самым крупным венчурным проектом. The DAO позволит появиться компаниям, которые в ином случае никогда бы не существовали», — заявил 10 июля 2016 года Стефан Туаль.

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

Рекурсивный вызов и крах The DAO

Именно столько в пятницу 17 июня в 9 часов утра стоил ETH:

А примерно в полдень стало известно, в чем причина резкого падения цены токена: The DAO атакована, украдено $50 миллионов.

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

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

«Я внимательно изучил код the DAO и решил поучаствовать после того, как нашел функцию, при запуске которой разделение вознаграждается дополнительными эфирами. Я задействовал данную функцию и законно получил 3 641 694 эфира. Хочу поблагодарить the DAO за эту награду. (…) Я оставляю за собой право принять любые и все возможные легальные действия против любых соучастников незаконных краж, заморозок или изъятия моих законно полученных токенов ETH, и я продолжаю активно работать с моей юридической фирмой. Все эти соучастники в ближайшее время получат соответствующие уведомления на свои почтовые адреса. Я надеюсь, что это событие станет ценным опытом для сообщества Ethereum, которому я желаю всего наилучшего», — говорилось в письме.

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

Возвращаясь к атаке, нужно напомнить, что кража была совершена как раз из-за уязвимости под названием «рекурсивный вызов» — она позволяла бесконечно снимать средства The DAO и переводить их в дочернее ДАО посредством многократного разделения ДАО, повторно собирая ETH в рамках одной транзакции.

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

Утешительные итоги

Год спустя можно с уверенностью сказать, что атака на The DAO не погубила ничего, кроме непосредственно The DAO, и подарила сообществу Ethereum Classic, вокруг которого собралось пусть и небольшое, но влиятельное сообщество. Взлом The DAO наоборот показал, что криптовалютный мир весьма устойчив к подобным потрясениям, даже в том зачаточном состоянии, которое было год назад.

Хотелось бы отметить, что в самом начале огромного бума ICO, начавшегося после провала The DAO, на Forklog вышел материал под названием «Уроки DAO: куда приводят мечты». Сейчас эти уроки можно назвать основами успешного выбора ICO в качестве инвестиций. Они не потеряли своей актуальности и сейчас, поэтому их можно процитировать целиком.

  1. Внимательно анализируйте ICO. Важно понимать, что вы покупаете и с какой целью. Жадность и погоня за быстрой наживой рано или поздно приводят к финансовым потерям. Безусловно, даже самые провальные в своей сути криптовалютные проекты в среднесрочной перспективе могут иметь колоссальный спекулятивный потенциал. И если как инвестор вы рассчитываете именно на это, не стоит вкладывать больше денег, чем вы готовы потерять.
  2. Отложенный релиз лучше небезопасного кода. Разработчики The DAO, по всей видимости, не ожидали такого финансового успеха, и это сделало проект привлекательным не только для инвесторов, но и для злоумышленников. Тем не менее, ничто не мешало на некоторое время заморозить проект, ограничив возможность работы с основным контрактом. И только после проведения тщательного тестирования при поддержке сообщества и специалистов по блокчейну и безопасности — запускать основной функционал проекта. То, с чем мы столкнулись в реальности, — непозволительная халатность программистов. В результате репутация отдельных разработчиков пострадала если не окончательно, то очень сильно.
  3. Здесь львы. Идеализм и благие намерения, которыми переполнено криптовалютное сообщество, опьяняют и отвлекают от реального положения дел. В то время как количество новых криптовалют и проектов растет почти экспоненциально, пора обратиться к истории фондовых рынков, чтобы не повторять ошибок прошлого.
  4. Эмоции и паника никогда не приводят к конструктивному решению проблемы.

О том, что произошло после атаки на The DAO, читайте в материале ForkLog, который будет опубликован 20 июля — в день годовщины хардфорка Ethereum.

Tanya Otter

И не забывайте следить за нашими новостями в Twitter, тем более что он теперь стал, как говорят, такой красивый!

Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Что такое The Dao (DAO) простыми словами?

Здравствуйте дорогие друзья, мы продолжаем вести колонку нашего блога, под названием  «Простыми словами о сложном». И сегодня, мы разберем с вами тему: «Что такое the DAO?». The DAO – это краудфандинговый проект, который достиг полной автоматизации в работе. Это значит, что для распределения средств между проектами не требуется человеческое подтверждения. Такая функция, помогает исключить коррупционную составляющую, и открывает новую страницу в инвестировании стартап проектов. Если вы не знаете, что такое краудфандинг, то читайте нашу статью: «Что такое краудфандинг простыми словами».

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

Что случилось с the DAO?

С первого дня своей работы, проект the DAO стал очень популярным как среди инвесторов, так и среди людей, которые хотели реализовать свои идеи, но на это у них не было средств. За первые месяцы работы, проект привлек 50 миллионов долларов, но но но…. Но злоумышленники сумели найти ошибку в коде и сломали его, посредством чего украли эфира на 50 миллионов долларов. Данное событие помешало the DAO раскрыть свой потенциал, и разделило сообщество Эфира на две части. Ведь для того, чтобы вернуть средства вкладчикам, разработчикам проекта the DAO пришлось пойти на беспрецедентный шаг – сделать хард форк. После чего, начался процесс возврата всех средств обратно, а проект так и не смог развиться, хотя перспективы ему рисовали ойойой какие. Кстати, именно из-за хардфорка, мир получил две криптовалюты с похожими названиями Ethereum и Ethereum Classic, более подробно об этом читайте здесь.

Что такое Charity DAO?

После запуска и взлома the DAO, разработчики поняли, что мир нуждается в подобном проекте, и решили сделать схожий с the DAO проект, под названием Charity DAO. Charity DAO – это более узкопрофильный проект, ведь направлен он, исключительно на благотворительность. В наше время, большинство людей не делают пожертвования в благотворительные, так как не доверяют им. Charity DAO может в этом помочь, ведь, как и в the DAO, люди не будут распределять средства вручную, это будет доверено программному коду Charity DAO. Мы надеемся, что разработчики смогут устранить возможность взлома этой сети, и она поможет многим людям.

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

Рекурсивный вызов: The DAO на грани смерти и хардфорк Ethereum

Ethereum Foundation во главе с Виталиком Бутерином пошли на спасение фондов the DAO в пользу инвесторов. Однако, последние будут иметь возможность только вывести средства — похоже, the DAO пришел конец.

Как сообщил Бутерин в записи на блоге проекта, устранение последствий атаки потребует сначала софтфорка, а потом и хардфорка сети Ethereum:

«Сообщество разработчиков предлагает софтфорк, (без отката; ни одна транзакция или блоки не будут «аннулированы»), который сделает так, что любые транзакции, использующие команды call/callcode/delegatecall и исполняющие код с хэшем 0x7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba (т.е. The DAO и дочерние ДАО) приведут к недействительности транзакции (не только команды, но и транзакции), начиная с блока номер 176000 (точный номер блока, с которого изменения вступят в силу до момента выпуска кода), предотвращая возможность вывода эфиров после 27-дневного окна. После этого будет осуществлен хардфорк, который позволит держателям токенов забрать свои эфиры», — разъяснил ситуацию Бутерин.

Хронология событий

В пятницу 17 июня произошла атака на The DAO — первый децентрализованный венчурный фонд на базе Ethereum. Сообщения об этом появились в официальном блоге проекта The DAO, в slack-сообществах и в социальных сетях. В течение последующих нескольких часов события развивались очень стремительно и драматично.

В официальном блоге the DAO был опубликован предполагаемый план действий для устранения последствий атаки. В частности, пользователям предлагалось осуществить спам атаку на Ethereum-адрес проекта, чтобы приостановить утечку средств.

Монеты ETH плавно перетекали на адрес злоумышленника, и на момент публикации новости баланс контракта превышал 3 641 694 ETH или свыше $64 млн. Однако злоумышленник не сможет вывести монеты из созданной дочерней DAO в ближайшие 27 дней (окно создания дочерней DAO).

https://etherscan.io/address/0x304a554a310C7e546dfe434669C62820b7D83490

Реакция рынка

Токен DAO очень быстро потерял в цене порядка 60%, в какой-то момент упав до 0.00007100 BTC за 1 DAO.

Ethereum также отреагировал на атаку, в определенный момент цена криптовалюты упала ниже отметки в 0.02000000 BTC

В свою очередь Виталик Бутерин в связи с атакой на The DAO призвал руководство криптовалютных бирж приостановить ввод и вывод средств, а также заморозить торги. Реакция не заставила себя ждать, и спустя некоторое время в официальном твиттере биржи Kraken появилось сообщение:

«Вывод средств временно приостановлен до появления отчета от @ethereumproject относительно утечки ETH из The DAO. Средства Kraken в безопасности»

Withdrawals temporarily suspended pending report from the @ethereumproject on The DAO ether leak. Kraken funds safe. https://t.co/dmh6V5NB79

— Kraken Exchange (@krakenfx) June 17, 2016

Ликвидация атаки и конец The DAO

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

На данный момент, утверждает Бутерин, атака успешно идентифицирована. По его словам, атака на The DAO все ещё продолжается с помощью разновидности «рекурсивного вызова». Это позволяет бесконечно снимать средства The DAO и переводить их в дочернее ДАО посредством многократного разделения ДАО, повторно собирая эфиры в рамках одной транзакции. Тем не менее, адрес дочернего ДАО, куда уходят похищенные средства установлен, а у сообщества есть около 27 дней (окно для создания дочернего ДАО, в рамках которого вывести средства невозможно), чтобы устранить проблему.

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

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

Отдельно он отметил, что использованная хакерами уязвимость касается только The DAO:

«Это проблема, которая влияет конкретно на The DAO; Ethereum в полной безопасности», — заявил Бутерин.

Держателей DAO-токенов лидер Ethereum призвал «сидеть смирно и не переживать», а биржи продолжать торги эфиром (не упомянув, однако, о токенах DAO).

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

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

«The DAO должны были больше времени уделить тестированию и работе в тестовой сети, но слишком всё быстро происходит, и сообщество постоянно ждёт продуктов на blockchain «завтра». Стефан [Туаль — прим.ред] все равно молодец. […] The DAO стали второй по значимости организацией, которая рассказала, что такое децентрализованные автономные организации, и своим появлением создала рынок моделей ДАО на платформе Ethereum и её аналогах”, — прокомментировал ситуацию лидер команды разработчиков проекта Aira Сергей Лоншаков.

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

Несмотря на завершение эксперимента The DAO, такое использование принципа too big to fail со стороны Ethereum Foundation привело ко вздоху облегчения со стороны участников организации, что отображено в заголовке соответствующей записи в официальном блоге:

«Краткое резюме по атаке #theDAO: форки и координация с [Ethereum] Foundation позволят вернуть все похищенные средства. Те же форки позволят передать эфиры из токенов DAO в умный контракт, который содержит только функцию выведения средств. Так как никакие деньги в The DAO не были потрачены и ничего не было украдено, ничего не пропало», — прокомментировал редакции Forklog сооснователь Slock.it Стефан Туаль.

Несмотря на сложившуюся ситуацию, представители Slock.it считают её только временной преградой к успеху концепции ДАО, однако о дальнейших планах сообщать, очевидно, пока не готовы.

Комментарии экспертов

Даниэль Надь, разработчик в проекте Ethereum:

«Суть бага в том, что единовременность (атомарность) вывода средств и уничтожения права голоса была нарушена, и при хитром инициировании раздела [на дочернюю DAO — прим.ред] образовался промежуток, куда можно было впихнуть запуск еще одного раздела. Таким образом, злоумышленники могут вывести все средства из DAO. Медленно, но верно. Этот конкретный контракт DAO — мертв, все вложенные в него эфиры потеряны вкладчиками и достанутся злоумышленнику. Хотя потратить он их сможет только через три недели. Тех, кто не вкладывались в DAO, проблема затронула лишь косвенно, путем влияния на цену эфира. Осталось два важных вопроса: Кто виноват? Что делать?»

Сергей Лоншаков, лидер команды разработчиков проекта Aira:

«Данная атака — хорошее испытание для сообщества и должна отрезвить тех людей, кто думают, что создать ДАО — это просто. The DAO первые, кто сделали на Ethereum, то о чем мы много говорили, как о перспективе — организации, которая имеет запрограммированные правила. Но предусмотреть всего сразу и когда ты первый — практически невозможно, нужно быть Сатоши, наверное. Я уверен, что решение будет найдено, возможно, оно не будет всех устраивать, но оно будет. Хоронить The DAO рано, скорее всего этот прецедент откроет возможности для других команд показать свою модель ДАО на фоне текущих проблем. Так что, мне кажется, всё к лучшему».

Андрей Хаврюченко, hacking distributed systems since 1998:

«Наилучшим, но все равно катастрофическим решением будет хардфорк Ethereum. Ошибка не в Ethereum, а в коде DAO. Попытка хардфорка убьет капитализацию Ethereum быстрее, чем любая катастрофа с DAO. Остановка торгов эфиром и DAO — тоже ошибка. Явно сейчас идут панические продажи, при которых будет украдено тоже немало монет».

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

«Мы инвестировали в данный проект, как и в Ethereum, понимая риски, что подобное может произойти, но нам эта инвестиция была интересна в том числе как эксперимент децентрализованного управления. Жаль, что он так быстро закончился. Что касается инвестиций, все эфиры инвестированные в the DAO будут возвращены, то есть можно будет обменять токены DAO на ETH. Сейчас на Poloniex премия за риск, если вдруг что-то пойдет не так, около 20%. Поэтому те, кто держит эфиры могут подзаработать. Что касаемо самого Ethereum, ликвидация The DAO отразится негативно на его цене, так как проект собрал 14% эфиров, и теперь они снова возвращаются на рынок. Многие инвесторы в связи с увеличением в портфеле ETH (поскольку они поменяют токены DAO обратно на ETH) будут продавать их. Плюс негативный фон также отразится на цене, так как инвесторы будут чуть менее оптимистичны. Долгосрочная рекомендация по Ethereum — buy and hold», — рассказал ForkLog сооснователь Cyber.fund Константин Ломашук.

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

ForkLog продолжает следить за развитием событий.

Toly Kaplan и Eugene Muratov

 

Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Закон и ДАО |

The DAO попала на первые полосы газет, собрав 150 миллионов долларов, или почти 12% от общего количества эфира в обращении. Этот нетрадиционный механизм краудфандинга позволяет инвесторам инвестировать собранный эфир (ETH) в конкретные проекты.

Идея и структура ДАО представляют значительные затруднения для юристов, потому что судам придется иметь дело с сетью контрактов, имитирующих сущность, а не с законно инкорпорированной сущностью. Закон просто не готов к ДАО, но можно спрогнозировать, что Комиссия по ценным бумагам и биржам (SEC) будет рассматривать токены, приобретенные инвесторами, как ценные бумаги (securities) или инвестиционные контракты, на которые распространяется ее юрисдикция.

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

Что такое ДАО? Что такое The DAO?

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

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

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

У The DAO три основных функции. Во-первых, она агрегирует активы инвесторов, принимая эфир в обмен на токены DAO. Во-вторых, она инвестирует собранный эфир в проекты, выбираемые по итогам голосования инвесторов. В-третьих, она выплачивает дивиденды держателям токенов DAO.

Как сказано в манифесте организации:

«Цель The DAO — использовать контролируемый эфир для реализации проектов, обещающих принести прибыль самой ДАО и ее участникам».

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

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

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

Будет ли ДАО признана законом?

В настоящее время ДАО не являются в США признанными субъектами права, что вызывает много вопросов по поводу прав и ответственности ДАО. Например, неясно, будут ли нести ответственность за действия ДАО ее создатели, кураторы, подрядчики или инвесторы. Хотя для ДАО может быть полезно нанять представителя-человека, держатели токенов ДАО могут решить не раскрывать главных действующих лиц.

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

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

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

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

Почему голосование может оказаться Ахиллесовой пятой ДАО?

Инвесторы в The DAO имеют право голоса, что позволяет им коллективно определять проекты, заслуживающие финансирования. Вес голоса каждого инвестора пропорционален доле принадлежащих ему токенов. Когда инвестор голосует за предложение, соответствующее количество его токенов блокируется. Однако, чтобы The DAO могла профинансировать какой-либо проект, он должен набрать большинство голосов при 20-процентном уровне участия в голосовании. Это может оказаться критической уязвимостью The DAO: как отметил технический директор Steemit Дэн Лаример (Dan Larimer), как только участник ДАО проголосовал, его эфир блокируется, пока проект не будет принят или отклонен, что снижает мотивацию участвовать в голосовании.

Кроме того, финансирование проектов может вызывать снижение курса эфира и токенов DAO, потому что эфир будет переводиться подрядчикам, которые, скорее всего, будут обменивать его на фиатные деньги. Как сказал Лаример, «при финансировании каждого проекта количество эфира, которым обеспечены токены DAO, уменьшается и заменяется спекулятивными долговыми расписками подрядчика», что снижает ценность собственного капитала ДАО.

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

Токены The DAO как ценные бумаги

SEC регулирует ценные бумаги или инвестиционные контракты, которые определяются как инвестиции в общее коммерческое предприятие (common venture) с обоснованным ожиданием получения прибыли благодаря чужим предпринимательским или управленческим усилиям. Как уже было сказано, скорее всего, инвесторы, которые приобретают токены DAO (или, точнее, «создают» их из эфира), покупают ценные бумаги или инвестиционные контракты.

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

The DAO обещает инвесторам прибыль — это несомненно, хотя при этом и оговаривается, что она может аккумулировать эфир для поддержания роста. The DAO также предупреждает о риске потери инвестиций: «Использование кода смарт-контрактов The DAO и создание токенов DAO сопряжены со значительным финансовым риском».

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

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

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

Update

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

Эндрю Хинкс (Andrew Hinkes)

Источник: coindesk.com

Подписывайтесь на новые видео нашего канала!

Поделиться ссылкой:

Related

Что означает DAO?

Deralized Автономная организация

Разное »Несекретный

14 14
DAO

Data Access Object

Computing »General Computing — и многое другое …

Оцените это:
DAO

на диске

Вычислительная техника »Общие вычисления

Оцените:
DAO

Военный атташе

Правительство» Военные

DAO

Бухгалтерия обороны

Правительственный »Военный

Оцените его:
DAO

База данных DAO

9000 Доступ к базе данных

Оцените:
DAO

Кто-нибудь владеет

Интернет »Чат

Оцените это:
DAO

Административный приказ

И наука »Наука об океане

Оценить:
DAO

Объект цифрового архива

Разное» Несекретный

DAO

Офицер по боеприпасам

Правительственный »Военный

Оцените это:
DAO

Двойное действие

Двойное действие

9 0015 Оценить:
DAO

Распределенная автономная организация

Разное »Без категории

Оцените:
DAO

Районный административный служащий

Региональный

it:
DAO

Степень добавлена ​​

Разное »Несекретный

Оценить его:
DAO

вокруг объектов

neous »Несекретный

Оцените:
DAO

Децентрализованная автономная организация

Разное» Несекретное

DAO

Объекты доступа к данным

Разное »Несекретные — и многое другое…

Оцените:
DAO

Децентрализованные автономные организации

Разное »Несекретный

DAO

Done After One

Разное »Несекретный

Оцените его:
DAO

28

Оцените это:
DaO

Единство действий

Правительство »ООН

Оцените его:
Оцените:
DAO

Департамент / Агентство / Организация

Государственный» Военный

DAO

Degree Add On

Разное »Несекретный

Оценить:
DAO

Оферта

Закон о раскрытии информации

Оцените: