Ставим Ethereum на Raspberry Pi, чтобы связать умные вещи контрактами
На пересечении двух ультрамодных тем, криптовалют и интернета вещей, возможно, лежит золотая жила. Представь: умные предметы в будущем смогут общаться друг с другом при помощи неразрывных контрактов. А посмотреть, как это будет работать, можно уже сегодня. В этой статье я расскажу тебе, как установить Ethereum на Raspberry Pi и запуcтить умный контракт, взаимодействующий с реальным миром.
- Сегодня в эфире. Краткий экскурс в Ethereum
- Интервью: Виталик Бутерин о себе и о создании Ethereum
- Внимание, это розыгрыш! Пишем простой смарт-контракт
- Ставим Ethereum на Raspberry Pi
- Распределенное автономное ограбление. Как хакер разорил автоматическую корпорацию DAO
Введение
Зачeм предметам обмениваться друг с другом контрактами? Примерно так же десять лет назад можно было спросить, зачем нужен смартфон или аккаунт в социальной сети. Пройдет еще десять лет, и никого не будет удивлять, что самоуправляемые автомобили или квадрокоптеры подзаряжаются от роботизированных заправок и расплачиваются криптовалютой.
Сейчас же мы находимся в самой начальной точке развития будущей экосистемы, но с появлением Ethereum у нас уже есть нецензурируемая децентрализованная и автономная среда, которая позволяет налаживать экономическое взаимодействие между девайсами. А раз есть, значит, можно экспериментировать!
Итак, тебе понадобятся:
- Raspberry Pi 2 или 3 или BeagleBone Black. Мы тестировали это руководство с RPi 3, но все должно работать и на RPi 2 и BBB. Нюансы могут быть только с установкой пакетов — в этом случае тебя спасет Google и смекалка.
- Карта на 64 Гбайт. Большой объем понадобится для хранения блокчейна Ethereum, который к тому же постоянно растет.
- Все, что ты хочешь подключить к порту GPIO Raspberry Pi.
Мы напишем умный контракт и загрузим его в сеть с помощью браузера Mist. Далее поднимем ноду на Raspberry Pi, развернем на ней небольшое приложение, которое будет слушать события от определенного контракта в сети и управлять GPIO пo наступлении этого события.
Подготовка
Для начала подготовим Raspberry Pi к работе.
- Форматируем карту и скачивaем Ubuntu Mate для Raspberry Pi (можно выбрать и Raspbian).
- Записываем образ на флеш-карту. Для этого можно воспользоваться консолью или Pi Filler.
- Вставляем карту и устанавливаем систему. После установки ресайзим карту, перезагружаемся и можем подключаться к RPi через Wi-Fi по SSH.
- Устанавливаем клиент сети Ethereum. Сейчас самый популярный из них — это Geth, он написан на Go. Можно собрать его из исходников, но этот процесс имеет некоторые особенности, поэтому более быстрый путь — скачать и установить уже собранную версию.
- Приложение у нас будет на Node.js, поэтому скачиваем версию для ARMv7 и устанавливаем:
$ wget <a href="https://nodejs.org/dist/v4.4.5/node-v4.4.5-linux-armv7l.tar.xz">https://nodejs.org/dist/v4.4.5/node-v4.4.5-linux-armv7l.tar.xz</a> $ 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
- Теперь нам нужно поставить два пакета 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. Есть много способов синхронизировать блокчейн.
- Самый долгий способ — просто запустить ./geth в фоне и оставить работать. Периодически придется проверять, не прервалась ли синхронизация.
- Используя опцию
./geth --fast
. В таком случае будут проверяться только заголовки блоков и процесс пойдет чуть быстрее, да и сам блокчейн будет занимать поменьше места. - Если на основной машине уже стоит клиент той же версии, то можешь просто скопировать папку chaindata (на «Маке» это ~/Library/Ethereum/chaindata) при помощи rsync.
- Экспортировать данные с основного компьютера можно и при помощи Geth:
geth export blockchain_backup
. Копируем бэкап на Raspberry Pi и разворачиваем там:geth export blockchain_backup
. Как ни странно, процесс тоже очень долгий. - Последний вариант — это не совсем о синхронизации, но если хочешь побыстрее начать экспериментировать, подойдет и он. Тебе понадобится открытая для запросов нода — своя или сторонняя в паблике. К примеру, можно взять инстанс на Digital Ocean, развернуть клиент там и синхронизировать блокчейн, как описано выше. Потом запускаешь его с открытым портом и можешь коннектиться к нему из приложения. Можно обойтись и без Digital Ocean и сделать то же самое на своей машине. Если Raspberry Pi находится в той же подсети, то процесс аналогичен:
$ screen -dmS eth geth --testnet --rpc --rpcaddr "localhost" --rpcport "8545" --rpcapi "eth,net,web3"
Контракт
Итак, все готово: клиент установлен, нода синхронизирована и работает, можно приступать к самому интересному. Для начала накидаем простейший контракт.
Извини, но продолжение статьи доступно только подписчикам
Подписка позволит тебе читать ВСЕ платные материалы сайта, включая эту статью, без каких-либо ограничений. Мы принимаем банковские карты, Яндекс.Деньги и оплату со счетов мобильных операторов. Подробнее о проекте
1 год3400 Р Экономия 1400 рублей! |
1 месяц400 Р |
Уже подписан?
Читайте также
- Ошибка в API Facebook предоставляла доступ к фото 6,8 млн пользователей
- Одного ноутбука оказалось достаточно для компрометации всей корпоративной сети
- Депутаты Госдумы разработали план по обеспечению работы Рунета на случай отключения от Сети
- Морские суда часто подвергаются кибератакам
- 25 декабря состоится встреча сообщества специалистов по кибербезопасности АСУ ТП / RUSCADASEC
- Уязвимость в приложении Logitech позволяла удаленно инициировать нажатие клавиш