Введение
Блокчейн-платформа Эмер существует уже три года, и на её основе работает ряд распределённых сервисов. Наибольший интерес она вызывает в среде бизнес-применений (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:\Users\USERNAME\AppData\Roaming\Emercoin
- 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 обеспечивает множество сервисов на одном блокчейне. Рекомендация – использовать префик сервиса, который двоеточием отделён от последующего поискового ключа. Пример такого ключа с указанием сервиса (EmerDNS): 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. Также на этом сайте можно посмотреть структуру и историю блоков. Это весьма хороший отладочный инструмент для наблюдения, «что же у нас внеслось в блокчейн».
В сети уже находятся в эксплуатации несколько немонетарных сервисов, приведём примеры наиболее популярных:
- EmerDNS – Децентрализованная нецензурируемая система доменных имён.
- EmerSSH – Инфраструктура публичных ключей всемирного масштаба.
- EmerSSL — Децентрализованная система беспарольной авторизации.
- InfoCard – распределённая система электронных визитных карточек. Работает в связке с EmerSSL, но может быть использована и отдельно. Техническое описание связки EmerSSL+InfoCard. Тест-сайт для этой системы, с примерами кода.
Также в процессе ввода в эксплуатацию находятся сервисы emcDPO и ENUMER.
Также существует механизм привлечения финансирования проектов через IPO на блокчейне Emer. Успешный пример такого IPO произвело крестьянское хозяйство Колионово, по результатам опыта которого была написана инструкция «Блокчейн для фермеров».
Все эти сервисы используют NVS как распределённое доверенное хранилище критической информации – доменных записей, публичных ключей шифрования, хешей сертификатов и подобных элементов установления доверия между распределёнными агентами. Заметим, что со стороны блокчейн-системы записи в NVS – пассивны, то есть даже если туда поместить программу, то сама блокчейн-система её исполнять не будет. И если кому-то надо её исполнять – он может это делать не в общем блокчейне, а на своей стороне, взяв на себя риски исполнения произвольного Тьюринг-совместимого кода.
Для получения дополнительной информации, посетите вики-справочник проекта.
Или обратитесь к разработчикам.
Комментарии (18)
reinvent
29.05.2017 13:54За что производится оплата при использовании этой сети, кому и как формируется стоимость?
olegarch
29.05.2017 15:00Оплата производится за инфляцию блокчейна, то есть добавление туда байтов.
Стоимость формируется тому, кто хочет что-либо добавить, по формуле «Storage Fees» из документа:
https://wiki.emercoin.com/en/Emercoin_NVS
EShumilov
29.05.2017 15:09Оплата(комиссия) требуется при транзакциях самих монет, и при создании или изменении записей Name-Value. Стоимость задана алгоритмом: для монетарных транзакций она равна 0.01 EMC независимо от количества пересылаемых монет.
При создании записей формула такая:
p = sqrt(0.01 * R * y) + s / 128
Где:
R = Текущая награда за блок PoW (в центах EMc).
y = Время на которое создается запись в годах (минимальное число 1 день)
s = Размер записи в байтах. Целое число делённое на 128 (для записей меньше 128 байт это значение равно нулю)
Вся комиссия безвозвратно сжигается.
.reinvent
29.05.2017 15:40Вся комиссия безвозвратно сжигается.
Никто не получает комиссию? Тогда за счет чего поддерживается необходимая мощность для генерации хэша?
Интересует каким именно образом решен вопрос оплаты создания новых блоков, как обеспечивается безопасность сети при отсутствии майнинга.olegarch
29.05.2017 15:49> Никто не получает комиссию?
Да.
> за счет чего поддерживается необходимая мощность для генерации хэша?
За счёт генерации новых монет майнерам.
> Интересует каким именно образом решен вопрос оплаты создания новых блоков,
При закрытии блока майнер получает POS или POW награду, смотря как майнит.
> как обеспечивается безопасность сети при отсутствии майнинга.
Алгоритмом POS. В этом случае майнерами становятся все владельцы монет, и майнинг становится истинно децентрализованным.
reinvent
29.05.2017 15:56За счёт генерации новых монет майнерам.
Если это неограниченная инфляция, то стоимость монет должна падать. Или стоимость валюты поддерживанится иным способом?
olegarch
29.05.2017 16:07+1Стоимость не только поддерживается, но даже увеличивается расширением экономики, то есть повышением востребованности монеты.
Подробнее об этом — в статье.
Кроме того, есть процесс, обраный эмиссии — сжигание монет за предоставленный сервис.
nsuvorov
05.06.2017 15:02Коллеги, а кто-нибудь пробовал развернуть Emercoin в докере? Весь день бьюсь, ошибка на ошибке.
nikitasius
Прикольно, но ЗОЛОТО, ПЛАТИНА зачем все эти криптовалюты НЕФТЬ, ГАЗ, за которыми ничего нет, ЕВРО, ДОЛЛАРЫ кроме обычного спроса и желания наживится?
Тот же биткоин ничем не отличается от D&G или от CC, так как это мода, которая подогревает спрос к марке. В итоге и ваша, и наша, и еще 100500 криптовалют пытаются
предоставить альтернативное решение для пользователейзасрать всемирную сеть тонной никчемных статей о том, какие они хорошие, чтобы бОльше людей начало от балды их использовать и чтобы они договорились о каком-то курсе, чтобы, в свою очередь, можно было продать (по хорошему курсу) намайненные на старте пиксели.В плане своей экономической составляющей, мне, с моего кожаного дивана, сие напоминает МММ с плавающим курсом, где местный Мавроди получает копеечку не в начале, а в конце цикла (не с покупки, а с продажи).
За упомянутыми выше цветметами есть огромная база в виде электроники и ракетостроения, без ресурсов твоя машина не заведется, а две валюты лежат в основе пачки стран Евросоюза, США и используются для расчетов повсеместно, в том числе и анонимно, в виде наличности, которую законами не запретить в виду, что это доллары и баксы, и все мы люди.
Virviil
На сегодняшний день blockchain db — это больше технология чем валюта. Денежки выступают как единица измерения криптографической сложности в таких системах, и несут далеко не первостепенное значение.
nikitasius
"cкорость записи" крайне низкая.
nsuvorov
Зато хранилищу можно доверять.
reinvent
Насколько понимаю, количество биткоинов (денежная масса) должно зависеть только от количества людей на планете.
nsuvorov
Мне, с моего дивана, подобные речи напоминают обычное бурчание ретроградов не желающих учиться новому. Простите.
nikitasius
Учится надо тому, что приносит практическую пользу и когда это эфффективно для решения конкретных задач.
Я реальных задач, под которые можно отдать эту криптовалюту или биткоины не вижу, кроме траты ресурсов на "майнинг" и продажи сего, чтобы делать бабки на моде и пытаться отбить потраченные ресурсы.
Как инвестицию на долгий срок (намайнить сейчас и оставить на пару лет) я смысла не вижу, так как кубиты не загорами, в китае работают целые фермы, а цветметы намного стабильнее и… стабильно растут.