Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Алексей Сидоров, Вячеслав Кукушкин (разработчик...

Алексей Сидоров, Вячеслав Кукушкин (разработчики Exonum). Оракулы для Exonum

Доклад на шестом, предновогоднем, митапе сообщества блокчейн-разработчи­ков Санкт-Петербурга
#spblockchain #spb #blockchain #meetup

Avatar for Dmitri Plakhov

Dmitri Plakhov

December 25, 2017
Tweet

More Decks by Dmitri Plakhov

Other Decks in Programming

Transcript

  1. Оракул блокчейна У нас есть смарт контракт, который распределяет подарки

    ровно в 23 55 по Москве. (Новогодняя лотерея криптокотиков). Время в блоках у блокчейнов весьма неточное. Каким образом мы можем узнать согласованное точное время для выполнения смарт контракта?
  2. Типы оракулов 1. Простой оракул, который берет информацию из источника

    данных и отправляет ее в блокчейн, в этом случае нет доверия ни к оракулу ни к источнику данных. 2. Oraclize: некоторая сеть, которая берет информацию из источника и как-то организует доказательство, что данные по пути не изменились. Есть небольшое доверие к оракулу, но нет доверия к данным. 3. Оракул с открытым кодом, который берет информацию из какого-то источника. Есть доверие оракулу, нет доверия источнику данных. 4. Оракул с открытым исходным кодом, тянущий инфу из многих источников разом и сам выбирающий "средний" ответ. 5. Сеть оракулов
  3. Оракул времени на Exonum Вводные: алгоритм консенсуса, в котором лишь

    некоторая часть узлов валидаторов создают блоки, то оракулы можно запускать в качестве обычных сервисов Exonum. Результат: 1) сеть оракулов, каждый из которых пользуется своим источником данных и у каждого валидатора свое представление о внешних данных 2) возможность использовать математический аппарат для определения достоверности данных. В случае оракула времени, каждый валидатор Exonum имеет собственный источник точного времени и при достижении новой высоты формирует транзакцию, в которой он записывает сколько времени у него. При исполнении этой транзакции, каждый узел сравнивает полученное время с временами на других узлах и вычисляет точное время.
  4. Алгоритм вычисления времени Требования к времени 1. Надежное к византийскому

    поведению 2. Детерменировано 3. Относительно точное (погрешность +- 1 минута) 4. Монотонное (не должно прыгать назад) Вычисление консенсусного времени 1. Число валидаторов это N, а f это число византийцев (f = N / 3) 2. Берем времена валидаторов 3. Сортируем от самого нового до старого 4. Любое время от f + 1 до 2 * f + 1 не является явно византийским, если византийцев меньше f 5. Из практических соображений нужно брать время f + 1 узла, как наиболее актуальное, соблюдая требование монотонности 6. Оценка погрешностей, сравнения с другими.
  5. Анкоринг Имеющийся в Exonum анкоринг пользуется данными из Bitcoin. Каждый

    валидатор опрашивает узел Bitcoin и узнает у него о последней непотраченной анкорящей транзакции, эту информацию он постит в виде Exonum транзакции, которая записывает эту информацию в блокчейн. Таким образом на каждый момент времени можно точно знать какую последнюю транзакцию видит каждый из валидаторов. И если последняя совпадает у 2/3+1 из них, то можно считать, что эти данные согласованы и смело пользоваться этой транзакцией как входной для следующей.