- PVSM.RU - https://www.pvsm.ru -

Как начать работать с блокчейном Emer

Введение

Блокчейн-платформа Эмер существует уже три года, и на её основе работает ряд распределённых сервисов. Наибольший интерес она вызывает в среде бизнес-применений (b2b), а также IT-профессионалов, в основном – связистов и безопасников.

Она изначально проектировалась как стабильная платформа для промышленных применений, то есть исходя из соображений «здравого консерватизма». В ядро системы были введены механизмы, стабилизирующие работу сети и повышающие её эффективность [1]. Также по соображениям безопасности был введён запрет на исполнение произвольного программного кода, загружаемого из вне, а оставлен классический скрипт Сатоши [2], неполный по Тьюрингу. Тем не менее, текущий ограниченный функционал без снижения безопасности позволяет создавать и эксплуатировать блокчейн-сервисы, примеры которых приведены ниже.

Основная идея платформы Emer: Много сервисов на одном блокчейне. Иными словами – установите единственный блокчейн, и получите пакет сервисов, а также возможность легко добавлять свои сервисы. Ряд компаний, таких как Deloitte [3] и I-teco [4] оценили возможности платформы, и уже используют её для решения своих задач. Данная статья расскажет Вам, как получить доступ к блокчейну Emer и использовать как существующие сервисы, так и внедрять свои.

Сеть Emer и её узлы

Структура сети Emer подобна таковой у подавляющего большинства других криптовалют, таких как Bitcoin, Litecoin, и им подобных, и представляет собою одноранговую пиринговую сеть, состоящую из узлов (нод). Узлы Emer связываются между собою по протоколу TCP/IP, порт 6661. В процессе работы узлы обмениваются информацией о других доступных узлах, и таким образом, в сети появляются новые p2p соединения. Граф соединений обладает высокой избыточностью, то есть существует много возможных путей передачи сообщений между произвольными узлами, и новые транзакции и блоки распространяются по сети, как слухи в большом городе. И если какой-то путь почему-то становится недоступным, то скорее всего, данные найдут дорогу обходным путём. Эта избыточность делает сеть надёжной, хотя она состоит из ненадёжных элементов, так как узлы далеко не всегда имеют 100% доступность.

Для получения доступа к сети Emer, Вам надо установить у себя программу-кошелёк (ноду), и просто её запустить. Для этого Вам надо либо скачать и инсталлировать бинарную программу [5], либо собрать самому из исходных кодов, доступных на github [6].
Программа поставляется в двух вариантах:

  • Полная версия, с GUI: emercoin-qt
  • Демон, без GUI: emercoind

После скачивания и инсталляции, программу можно сразу же запускать. Запущенная программа (нода) сама соединится с другими активными нодами (пирами), и синхронизирует блокчейн, а при первом старте – скачает его у пиров. После начальной синхронизации, которая занимает несколько часов, нода активна и готова к работе. При первом старте, программа создаёт файл кошелька wallet.dat, который располагает в том же каталоге, где находится блокчейн и другие файлы (каталог данных программы). В зависимости от используемой ОС, эти файлы находятся в:

  • Windows: C:UsersUSERNAMEAppDataRoamingEmercoin
  • MacOS: $HOME/Library/Application Support/Emercoin
  • Linux/FreeBSD: $HOME/.emercoin

Файл wallet.dat содержит приватные ключи Вашего кошелька, то есть – Ваш баланс. В случае потери этого файла Вы потеряете и свои деньги тоже. Поэтому мы настоятельно рекомендуем регулярно делать резервную копию этого файла, особенно – после создания новых имён и отправки денег, то есть после действий, создающих новые приватные ключи и адреса.

При инсталляции на Linux демона emercoind из пакетов, для этого демона создаётся специальный псевдо-пользователь “emc:emc”, домашний директорий которого находится в /var/lib/emc, а сама программа инсталлируется в /usr/bin/. Туда же инсталлируется и программа emercoin-cli, которая является интерфейсом командной строки к демону. Программа имеет права доступа такие, что её может запустить любой пользователь системы, входящий в группу “emc”. Управляя списком этой группы, можно управлять доступом непривилегированных пользователей к ноде Emer.

Интерфейс к узлу

Запущенная программа может управляться как через GUI (если это emercoin-qt), так и через HTTP JSON API (оба варианта: emercoind, emercoin-qt).

В QT-версии можно открыть консоль отладки в пункте Help/Debug Window/Console, и вводить консольные команды. Например команда “getinfo” возвращает информацию по ноде и балансу кошелька (естественно, в новом кошельке баланс нулевой). Команда “help” выводит список доступных команд. Команда “help getinfo” распечатает детальную информацию по команде getinfo. Аналогично, help работает и для других команд.

Наибольший интерес представляет собою HTTP JSON RPC API, посредством которого можно легко связать ноду Emer с другими системами, и тем самым получить интерфейс к блокчейну.
Параметрами интерфейса заведуют следующие строки конфигурационного файла emercoin.conf, расположенного в каталоге данных программы:


listen=1 # разрешить слушать порт API
server=1 # запустить модуль API-сервера
rpcallowip=127.0.0.1 # Разрешено принимать запросы только из локальной машины
rpcport=6662 # Порт для HTTP JSON RPC API
rpcuser=emccoinrpc # username для API
rpcpassword=secret_password # Пароль для API

В стандартной linux-поставке демона, файл emercoin.conf с соответствующим начальным содержимым создаётся инсталляционным скриптом. В случае же ручной установки QT-программы для Вашего username, или же в системе Windows, этот файл надо создать вручную, и внести туда соответствующие параметры. В системе Windows будьте внимательны – по дефолту Windows скрывает расширения файлов, и если в таком режиме Вы попробуете создать emercoin.conf, то Windows создаст Вам emercoin.conf.txt, который программа читать не будет. Убедитесь, что у Вас расширения не скрываются, и файл действительно называется emercoin.conf.

Если Вы создавали файл emercoin.conf во время работы программы, перезапустите её.

Командная строка

В случае использования демона, для управления им применяется программа emercoin-cli, которая имеет сокращённый symlink “emc”. Таким образом, в Linux/BSD наберите в командной строке:

$ emc getinfo

И Вы увидите ответ от демона-ноды. Аналогично работают другие команды. Например, введите:

$ emc help

И Вы увидите полный список команд. И команды, и параметры emercoin-cli соответствуют таковым из отладочной консоли QT-версии.

Доступ из внешних программ

Покамест мы обходились без какого-либо программирования. Да и далее будем обходиться без него в том, что касается самого блокчейна. Но всё-таки при интеграции блокчейна Emer как компонента других систем, некое программирование вне блокчейна всё-таки нужно. К надёжности этих программ не предъявляется сверх-высоких требований, ибо эти программы находятся на стороне прикладного ПО а не в блокчейне, и следовательно – всегда могут быть исправлены или заменены при необходимости.

Доступ производится стандартным запросом HTTP на порт, указанный в конфигурационном файле. В запросе посылается POST JSON, соответственно, в ответе также получаете JSON, содержащий запрашиваемую информацию, или же код ошибки. Схема взаимодействия напоминает запросы и ответы в SQL-сервер.

Интерфейс полностью совместим с интерфейсом JSON RPC API от Bitcoin, и можно использовать всю документацию Bitcoin как руководство. Например, этот документ [7] демонстрирует использование интерфейса из различных языков программирования – правда, с использованием соответствующих интерфейсных библиотек.

Но те библиотеки особо не нужны, и можно запросы подавать напрямую, «как есть». Пример ниже демонстрирует использование программы curl для подачи такого запроса (всё посылать в одну строку):


curl –user emccoinrpc:secret_password --data-binary 
    '{"jsonrpc": "1.0", "id":"test", "method": "getinfo", "params": [] }' 
    -H 'content-type: text/plain;' http://127.0.0.1:6662/

В этом примере посылается команда getinfo и пустой массив параметров. В командах, требующих параметров, их надо вносить в массив “params”.
Ниже приведена процедура на PHP, которая без всяких библиотек делает прямой запрос в Emer-ноду. Первый параметр – команда, второй – массив аргументов:


$emcCONNECT = “http://emccoinrpc:secret_password@127.0.0.1:6662/”;
// Performs request to EMC wallet
function Req($cmd, $params) {
  global $emcCONNECT;
  // Prepares the request
  $request = json_encode(array(
    'method' => $cmd,
    'params' => $params,
    'id' => '1'
  ));
  // Prepare and performs the HTTP POST
  $opts = array ('http' => array (
    'method'  => 'POST',
    'header'  => 'Content-type: application/json',
    'content' => $request
  ));
  $fp = fopen($emcCONNECT, 'rb', false, stream_context_create($opts));
  if(!$fp) 
    throw new Exception('emcssl_NVS_req: Unable to connect to EMC-wallet');

  $rc = json_decode(stream_get_contents($fp), true);
  $er = $rc['error'];
  if(!is_null($er)) 
    throw new Exception('emcssl_NVS_req: Response error: ' . $er);

  return $rc['result'];
} // Req

Пример использования этой процедуры можно найти в подсистеме голосования на блокчейне emcvote [8]. Уточним, что второй аргумент функции, «params» — это не ассоциативный массив JSON, а обычный массив PHP, создаваемый встроенной функцией array(). Если команда не требует параметров, то ей надо передать пустой массив, вызвав например:
$reply = Req(«getinfo», array());

Аналогичный интерфейс для языка “C” с использованием библиотеки curl можно взять из исходников программы emcssh: github.com/emercoin/emcssh [9]

Расширения Emer

Как было указано выше, Emer по набору команд и их аргументов совместим с Bitcoin, интерфейс которого де-факто является стандартом финтех-технологий, и всё, что работает с Bitcoin, будет без проблем работать с Emer тоже.

Однако Emer имеет сильное отличие от Bitcoin. В блокчейне Emer присутствует NVS – Name-Value Storage. Это универсальное хранилище произвольных данных в блокчейне. Хранение производится в виде пар ключ-значение, где ключ – уникальный в пределах сети поисковый ключ, а значение – произвольный массив байтов. Размер данных – до 20kb, размер поискового ключа до 512 байт.

Доступ к этому хранилищу обеспечивается расширенным набором команд API, которые формируют уровень представления сервиса (№6) в семиуровневой модели OSI [10].

Cоответственно, доступ к NVS есть и в GUI, во вкладке “Manage Names”. Список команд API и примеры использования NVS приведены на wiki-справочнике [11] проекта.

NVS обеспечивает множество сервисов на одном блокчейне. Рекомендация – использовать префик сервиса, который двоеточием отделён от последующего поискового ключа. Пример такого ключа с указанием сервиса (emc DNS): dns:flibusta.lib

Даже имея нулевой баланс на кошельке, Вы можете извлекать записи и их историю. Например, подайте в консоли (или через API) команды:


name_show dns:flibusta.lib
name_history dns:flibusta.lib

И Вы увидите текущую запись DNS Флибусты, и историю изменения этой записи.
Для внесения новых записей или модификации существующих в кошельке необходимо иметь баланс в несколько EMC для покупки сервиса – добавления чего-либо в блокчейн.

Уточним, что под модификацией записи подразумевается создание нового значения для того же поискового ключа, старое значение тоже остаётся в блокчейне навсегда и доступно посредством команды name_history. Создание же записей делается командой name_new, а обновление – name_update. Запись становится доступной для других узлов сети после первого подтверждения (закрытия блока), что происходит примерно раз в 10 минут.

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

NVS-записи, внесённые в блокчейн кем-либо, можно увидеть на сайте обозревателя блокчена Emer [12], в разделе NVS. Также на этом сайте можно посмотреть структуру и историю блоков. Это весьма хороший отладочный инструмент для наблюдения, «что же у нас внеслось в блокчейн».

В сети уже находятся в эксплуатации несколько немонетарных сервисов, приведём примеры наиболее популярных:

  • emcdns [13] – Децентрализованная нецензурируемая система доменных имён.
  • emcssh [14] – Инфраструктура публичных ключей всемирного масштаба.
  • emcssl [15] — Децентрализованная система беспарольной авторизации.
  • InfoCard – распределённая система электронных визитных карточек. Работает в связке с emcssl, но может быть использована и отдельно. Техническое описание связки emcssl+InfoCard [16]. Тест-сайт [17] для этой системы, с примерами кода.

Также в процессе ввода в эксплуатацию находятся сервисы emcdpo [18] и ENUMER.

Также существует механизм привлечения финансирования проектов через IPO на блокчейне Emer. Успешный пример такого IPO произвело крестьянское хозяйство Колионово, по результатам опыта которого была написана инструкция «Блокчейн для фермеров [19]».

Все эти сервисы используют NVS как распределённое доверенное хранилище критической информации – доменных записей, публичных ключей шифрования, хешей сертификатов и подобных элементов установления доверия между распределёнными агентами. Заметим, что со стороны блокчейн-системы записи в NVS – пассивны, то есть даже если туда поместить программу, то сама блокчейн-система её исполнять не будет. И если кому-то надо её исполнять – он может это делать не в общем блокчейне, а на своей стороне, взяв на себя риски исполнения произвольного Тьюринг-совместимого кода.

Для получения дополнительной информации, посетите вики-справочник проекта:
wiki.emercoin.com/ru [20]

Или обратитесь к разработчикам:
emercoin.com/contact [21]

Автор: Emercoin

Источник [22]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/256424

Ссылки в тексте:

[1] механизмы, стабилизирующие работу сети и повышающие её эффективность: https://cryptor.net/kriptovalyuty/pod-kapotom-emercoin

[2] скрипт Сатоши: https://en.bitcoin.it/wiki/Script

[3] Deloitte : http://www.econotimes.com/Deloitte-demonstrates-new-solution-for-electronic-document-flow-based-on-Emercoin-blockchain-605619

[4] I-teco: http://www.i-teco.ru/press/news/77792/

[5] бинарную программу: http://emercoin.com/#download

[6] github : https://github.com/Emercoin/

[7] документ: https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)

[8] emcvote: https://github.com/emercoin/emcvote

[9] github.com/emercoin/emcssh: https://github.com/emercoin/emcssh

[10] семиуровневой модели OSI: https://en.wikipedia.org/wiki/OSI_model

[11] приведены на wiki-справочнике: https://wiki.emercoin.com/en/Emercoin_NVS

[12] обозревателя блокчена Emer: https://emercoin.mintr.org

[13] emcdns: https://cryptor.net/kriptovalyuty/pod-kapotom-emercoin-chast-2-decentralizovannaya-necenzuriruemaya-sistema-domennyh

[14] emcssh: https://cryptor.net/kriptovalyuty/pod-kapotom-emercoin-chast-3-emcssh-infrastruktura-publichnyh-klyuchey-vsemirnogo

[15] emcssl: https://cryptor.net/kriptovalyuty/pod-kapotom-emercoin-chast-4-emcssl-decentralizovannaya-besparolnaya-sistema

[16] emcssl+InfoCard: https://habrahabr.ru/post/257605/

[17] Тест-сайт: https://emcssl.emercoin.com/

[18] emcdpo: https://emercoin.com/emcdpo-ru

[19] Блокчейн для фермеров: https://golos.io/ru--blokcheijn/@emercoin/blokchein-dlya-fermerov-rukovodstvo-po-ispolzovaniyu

[20] wiki.emercoin.com/ru: https://wiki.emercoin.com/ru/

[21] emercoin.com/contact: https://emercoin.com/contact

[22] Источник: https://habrahabr.ru/post/329632/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best