Реализация простой процедуры обновления на стороне сервера

Эта статья является частью пошагового руководства, состоящего из двух частей, по созданию простой службы обновления смарт-контрактов в экземпляре 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

Готов зажечь! В следующий раз: развернуть простой контракт и поговорить с ним.