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

 

Введение

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

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

Итак, тебе понадобятся:

  • Raspberry Pi 2 или 3 или BeagleBone Black. Мы тестировали это руководство с RPi 3, но все должно работать и на RPi 2 и BBB. Нюансы могут быть только с установкой пакетов — в этом случае тебя спасет Google и смекалка.
  • Карта на 64 Гбайт. Большой объем понадобится для хранения блокчейна Ethereum, который к тому же постоянно растет.
  • Все, что ты хочешь подключить к порту GPIO Raspberry Pi.

Мы напишем умный контракт и загрузим его в сеть с помощью браузера Mist. Далее поднимем ноду на Raspberry Pi, развернем на ней небольшое приложение, которое будет слушать события от определенного контракта в сети и управлять GPIO по наступлении этого события.

 

Подготовка

Для начала подготовим Raspberry Pi к работе.

  1. Форматируем карту и скачиваем Ubuntu Mate для Raspberry Pi (можно выбрать и Raspbian).
  2. Записываем образ на флеш-карту. Для этого можно воспользоваться консолью или Pi Filler.
  3. Вставляем карту и устанавливаем систему. После установки ресайзим карту, перезагружаемся и можем подключаться к RPi через Wi-Fi по SSH.
  4. Устанавливаем клиент сети Ethereum. Сейчас самый популярный из них — это Geth, он написан на Go. Можно собрать его из исходников, но этот процесс имеет некоторые особенности, поэтому более быстрый путь — скачать и установить уже собранную версию.
  5. Приложение у нас будет на Node.js, поэтому скачиваем версию для ARMv7 и устанавливаем:
     $ wget https://nodejs.org/dist/v4.4.5/node-v4.4.5-linux-armv7l.tar.xz
     $ tar -xvf node-v4.4.5-linux-armv7l.tar.xz
     $ cd node-v4.4.5-linux-armv7l
     $ sudo cp -R * /usr/local/

Убеждаемся, что все в порядке:

$ node -v
v4.4.5
$ npm -v
2.15.5
  1. Теперь нам нужно поставить два пакета npm: web3 и onoff. Для этого, в свою очередь, понадобится Git, а также g++ 4.7 (для корректной установки onoff):
     $ sudo apt-get install g++-4.7 git
     $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
     $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
     $ sudo update-alternatives --config gcc

Ставим пакеты:

$ sudo npm install -g onoff web3
 

Синхронизация

Для начала работы нужно синхронизировать блокчейн. Иногда это может занять несколько дней. «Легких» клиентов Ethereum пока что нет, и на твоем девайсе должна храниться вся информация о транзакциях с начала летописи. Сейчас архив занимает около 20 Гбайт.

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

  1. Самый долгий способ — просто запустить ./geth в фоне и оставить работать. Периодически придется проверять, не прервалась ли синхронизация.
  2. Используя опцию ./geth --fast. В таком случае будут проверяться только заголовки блоков и процесс пойдет чуть быстрее, да и сам блокчейн будет занимать поменьше места.
  3. Если на основной машине уже стоит клиент той же версии, то можешь просто скопировать папку chaindata (на «Маке» это ~/Library/Ethereum/chaindata) при помощи rsync.
  4. Экспортировать данные с основного компьютера можно и при помощи Geth: geth export blockchain_backup. Копируем бэкап на Raspberry Pi и разворачиваем там: geth export blockchain_backup. Как ни странно, процесс тоже очень долгий.
  5. Последний вариант — это не совсем о синхронизации, но если хочешь побыстрее начать экспериментировать, подойдет и он. Тебе понадобится открытая для запросов нода — своя или сторонняя в паблике. К примеру, можно взять инстанс на Digital Ocean, развернуть клиент там и синхронизировать блокчейн, как описано выше. Потом запускаешь его с открытым портом и можешь коннектиться к нему из приложения. Можно обойтись и без Digital Ocean и сделать то же самое на своей машине. Если Raspberry Pi находится в той же подсети, то процесс аналогичен:
    $ screen -dmS eth geth --testnet --rpc --rpcaddr "localhost" --rpcport "8545" --rpcapi "eth,net,web3"

 

Контракт

Итак, все готово: клиент установлен, нода синхронизирована и работает, можно приступать к самому интересному. Для начала накидаем простейший контракт.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


4 комментария

  1. clicker314

    21.07.2016 at 12:47

    Все что описано — понятно. Совершенно не понятно, как это использовать в реальной жизни.

    Откуда деньги???

  2. Nick

    23.07.2016 at 07:21

    Хорошая статья! Есть несколько недочётов.

    Ни слова не сказано, что такое газ. Видно, что к концу статьи автор уже подустал всё объяснять))
    В начале статьи два раза пишется, что мы выбираем Geth. Ну выбрал один раз — и ладно уже)
    Ну и с английским чуток накосячили, надо писать не eithersRecieved, а ethersReceived.

    А так — сложновато… у меня мозг превратился в желе))
    Фраза «Теперь в созданном контракте ты можешь изменять значение переменной state и пересылать на его адрес эфир» непонятна от слова «совсем». Привыкли, что эфир можно отправлять на счёт какой-нибудь, но переслать эфир на адрес контракта?? Это как? Просьба добавить пояснение.

  3. 84ckf1r3

    15.08.2016 at 11:06

    Bitcoin и Ethereum выглядят как киберпанковская утопия. Это идеальные системы, которые бы отлично работали в мире, состоящим из одних машин. Однако в мире есть люди, и большинству из них чужды понятия математической логики. Они руководствуются своими желаниями, эмоциями, верой (способностью считать что-то истиной без проверки) и постоянно меняющимися представлениями о том, как им следует поступать. Поэтому отношения между людьми в современном обществе строятся на чём-то осязаемом — преимущественно на товарно-денежных отношениях в их разном выражении. Понятно, что натуральный обмен банально неудобен, а современные деньги ничего не стоят сами по себе. Однако это всё же не столь абстрактные сущности, как криптовалюты. За эмиссией банкнот и монет всегда стоит правительство какой-то страны (или даже нескольких стран). Оно выступает гарантом платёжеспособности конкретной валюты и поддерживает её экономическими, политическими и прочими методами — до тех пор, пока его не свергнут, или не перестанет существовать сама страна. Изначально многие валюты были обеспечены золотом и другими металлами с уникальными свойствами. У криптовалют теряется связь с физическим миром. Даже из медного гроша можно сделать что-то нужное в быту (пуговицу, грузик, электрод), а целое состояние в биткоинах и эфирах — это просто числа в распределённой сети. Очередной пример того, как реальные ресурсы тратятся на виртуальные. Считаю, что как идея криптовалюты и смарт-контракты прекрасны. Над их же практически значимой реализацией придётся работать ещё долго.

    • VlS

      19.04.2017 at 21:16

      Ты не прав. Bitcoin задуман как замена денег которые безконтрольно и в своих интересах эмитирует правящая верхушка конкретной страны. По поводу же реальной ценности обычной валюты, увы она такая же виртуальная как и у криптовалют. Никто не может проверить сколько за ней стоит золота и т.д.
      А вот по поводу Этериума я не очень понял что с ним делать. Этот контракт просто аналог нотариального подтверждения? Хорошо бы почитать как и кто это применяет на практике.

Оставить мнение

Check Also

Беспощадный буст. Как ускорить многопоточный код на C++

Уже много лет твой компьютер умеет выполнять код любимого ПО параллельно на всех своих ядр…