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

CodeFest 2018. Никита Баксаляр (MaidSafe) — Бло...

CodeFest 2018. Никита Баксаляр (MaidSafe) — Блокчейн с человеческим лицом: децентрализованные приложения на базе Ethereum

Посмотрите выступление Никиты: https://2018.codefest.ru/lecture/1295/

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

В этом докладе мы не будем говорить о трейдинге, токенах, ICO и других набивших оскомину темах.

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

Темы доклада:
— Вводная: как работают смарт-контракты и что они дают
— Как устроена P2P-сеть Ethereum и чем это лучше обычных серверов
— Деплой и применение DApps в частных сетях (private blockchain)
— API для блокчейна и контрактов в сети Ethereum
— Немного про создание пользовательского интерфейса для DApps (JavaScript/web, desktop).
— Примеры приложений, которые можно создавать на базе Ethereum.

CodeFest

April 05, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. Немного про Ethereum • «Мировой компьютер» и база данных •

    Платежное средство • Платформа для децентрализованных приложений (ÐApps)
  2. Как устроен Ethereum • Децентрализованная P2P-сеть в основе • Виртуальная

    машина EVM • «Машинный» код и высокоуровневые языки
  3. Блокчейн • Средство достижения консенсуса • Подтверждает корректность транзакций •

    Использует Proof of Work: алгоритм подтверждения выполненной работы • Все данные публичны
  4. Аккаунты • Каждый аккаунт имеет 160-битный адрес • Хранят состояние

    и коины (Ether) • Делятся на два типа: контролируемые пользователями и контракты
  5. Смарт-контракты • Специальный тип аккаунтов • Не могут быть изменены

    • Хранят код и данные • Запускают код в ответ на сообщения
  6. Создание транзакций • Создаются только контролируемыми пользователями аккаунтами • …

    но есть внутренние транзакции: передача сообщений другим смарт-контрактам в сети
  7. Цена транзакций • Gas — «топливо» для исполнения транзакций •

    Каждая выполняемая EVM инструкция
 отнимает gas • У каждой транзакции — лимит числа выполняемых инструкций (gas limit)
  8. Цена транзакций • Вознаграждение за выполнение транзакции
 уходит майнерам •

    Майнеры выбирают из очереди наиболее выгодные для себя транзакции (gas price) • Средняя цена транзакции — ~0.002 ETH или ~60 ₽
  9. Выполнение кода • Ethereum VM интерпретирует байткод • Майнеры соревнуются

    за добавление транзакции в блокчейн • Первый майнер успешно добавивший блок получает ~3 ETH
  10. Хранение состояния • Состояние хранится у всех участников сети и

    доступно всем • Ключ → значение (данные связываются с аккаунтами) • Реализовано через специальные деревья Меркла
  11. contract Counter { uint counter; function Counter(uint start) public {

    counter = start; } } Контракты uint counter;
  12. contract Counter { uint counter; function Counter(uint start) public {

    counter = start; } } Контракты function Counter(uint start) public { counter = start; }
  13. [{
 "constant": false,
 "inputs": [],
 "name": "increment",
 "outputs": [],
 "payable":

    false,
 "type":"function"
 }, { … }] Application Binary Interface • Скомпилированное описание контракта, с адресами функций в байткоде
  14. Типы данных • Строки (string), числа (int, uint), адреса (address)

    • Структуры: 
 struct Deposit { address addr; uint amount; }
  15. Вызов функций • Могут быть вызваны любым пользователем, все контракты

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

    Ключ → значение • Хранит только значение, поэтому нет перечисления и итерации
  17. Интерфейсы interface Token { function transfer(address recipient, uint amount) public;

    } • Позволяют создавать контракты с предсказуемым поведением
  18. Web3.js • Взаимодействие с сетью Ethereum из браузера и JavaScript

    • Доступны все клиентские функции • Позволяет создавать интерфейс для приложений
  19. Токены и ERC20 interface ERC20Interface { <…> function balanceOf(address tokenOwner)


    constant returns (uint balance); function transfer(address to, uint tokens)
 returns (bool success); <…> }
  20. function transfer(address to, uint tokens) public
 returns (bool success)
 {

    balances[msg.sender] -= tokens; balances[to] += tokens; }
  21. function transfer(address to, uint tokens) public
 returns (bool success)
 {

    balances[msg.sender] -= tokens; balances[to] += tokens; } balances[msg.sender]
  22. Реальные проекты? • «Умный» банкинг • P2P-кредитование • Логистика •

    DNS без централизации • Голосование и прямая демократия &
  23. Подведение итогов • Децентрализованные приложения можно создавать уже сейчас •

    Существуют некоторые нерешенные проблемы • Проект продолжает активно развиваться