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

в 3:55, , рубрики: api, bitcoin, cryptocurrencies, DNS, emercoin, http, ipo, IT-стандарты, json, php, ssh, SSL, Блог компании Emercoin, платежные системы

Введение

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

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

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

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

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

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

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

Но те библиотеки особо не нужны, и можно запросы подавать напрямую, «как есть». Пример ниже демонстрирует использование программы 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. Уточним, что второй аргумент функции, «params» — это не ассоциативный массив JSON, а обычный массив PHP, создаваемый встроенной функцией array(). Если команда не требует параметров, то ей надо передать пустой массив, вызвав например:
$reply = Req(«getinfo», array());

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

Расширения Emer

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Emercoin

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js