Реализация простой процедуры обновления на стороне сервера
Эта статья является частью пошагового руководства, состоящего из двух частей, по созданию простой службы обновления смарт-контрактов в экземпляре Amazon Web Services EC2, работающем под управлением Node.JS, с помощью Ethereum JavaScript API (web3.js). Вторая часть доступна по адресу:https://blog.cotten.io/talking-to-ethereum-smart-contracts-2-2-1e9737b9da59
Простая цель: одностороннее обновление
В рамках постоянных усилий по разработке прототипа служб оракула я решил проверить функциональность автономного сервера, взаимодействующего со смарт-контрактом в сети.
Для этого я создам экземпляр EC2 в облаке Amazon и настрою его с помощью Node.JS и Ethereum Javascript API (web3.js). Кроме того, я буду развертывать простой смарт-контракт в тестовой сети Ethereum Rinkeby для связи с сервером.
Целью будет регулярное обновление одного uint
в смарт-контракте при отклонении любых внешних попыток (например, не моего сервера) выполнить обновление.
Настройка сервера
Мы будем следовать стандартной настройке EC2 с помощью Amazon Linux AMI. После запуска экземпляра и входа в систему сообщите нам, что нам нужно запустить обновления.
Как следует из сообщения, мы запустим sudo yum update -y
для автоматической установки всех обновлений, которые были добавлены с момента последней основной версии Amazon Linux 2.
После того, как мы это сделали, мы также хотим установить зависимости для взаимодействия с сетью Ethereum, и мы начнем с Node.JS.
У Amazon уже есть полезное руководство по установке Node.JS на сервер Amazon, и мы приведем его здесь:
1. Установите nvm (менеджер версий узлов)
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
Обратите внимание, что он рекомендует перезапустить ваш терминал (выйти/вновь войти), чтобы применить правильную директиву экспорта. Я предпочитаю просто перезагружать.
source .bashrc
Если мы запустим export
в командной строке, мы увидим список переменных среды и то, что упомянутые выше были правильно добавлены в нашу сессию:
Затем мы фактически запустим nvm, чтобы установить Node.JS.
. ~/.nvm/nvm.sh
Не говоря уже о приведенной выше команде и документации Amazon: предшествующая точка в команде совпадает с командой source
, и все, что делает эта команда, — это источник файла. Я только указываю на то, что это странно, поскольку ранее документация рекомендовала перезапускать сеанс оболочки вместо запуска source
в .bashrc — немного не в стиле.
Между тем, приведенная выше команда не имеет вывода, но мы готовы к работе.
2. Давайте установим Node.JS с помощью nvm
Мы просто установим последнюю версию Node.JS:
nvm install node
Это было просто.
3. Давайте установим Web3.js
Теперь Node.JS установлен, и у нас есть менеджер пакетов узла (npm). Итак, давайте установим Ethereum JavaScript API (web3.js):
npm install web3
Опять же, это было легко.
4. Давайте установим другие зависимости
Для целей этого проекта мы не собираемся запускать полный узел Ethereum. Я развернул эту настройку на небольшом диске объемом 8 ГБ (по умолчанию t2-micro), и, поскольку мы не собираемся отслеживать состояние смарт-контракта в режиме реального времени (мы просто отправляем обновления), мы можем обойтись без облегченного кошелька и подключение к удаленному узлу.
Я узнал об этом (в основном) безголовом методе из отличной статьи CodeTract: https://medium.com/@codetractio/try-out-ethereum-using-only-nodejs-and-npm-eabaaaf97c80
Прежде чем делать что-либо еще, давайте установим Git, так как он понадобится некоторым зависимостям для синхронизации.
sudo yum install git -y
Кроме того, компилятор С++:
sudo yum install gcc gcc-c++ -y
И теперь мы можем установить другие зависимости Ethereum:
npm install ethereumjs-util ethereumjs-tx eth-lightwallet
Готов зажечь! В следующий раз: развернуть простой контракт и поговорить с ним.