Представим ситуацию: вы приходите в магазин, скажем, дорогих часов, покупаете понравившийся товар, с нетерпением идете домой, чтобы открыть заветную коробочку, открываете ее, и, вдруг, выясняется, что купленный товар — дешевая подделка.
Знакомо? Что делать и кто виноват? Доверие к производителю часов у вас начинает резко падать. А разве виноват произоводитель часов, что его продукцию подделывают? Спорный вопрос, мне кажется. Так или иначе, очевидно, что контрафакт причиняет огромные репутационные потери и убытки легальным производителям.
Решением может быть использование продукта EMC DPO и блокчейна Emercoin.
Как это может работать:
Представим, вы приходите всё в тот же магазин дорогих часов, выбираете товар, но перед его покупкой видите на коробке QR-код с сопроводительной надписью что-то вроде «отсканируй меня, чтобы убедиться, что я не подделка». Вы сканируете QR-код, который отправляет вас на сайт производителя, где открывается, непосредственно, информация существует ли товар с таким серийным номером и был ли он ранее куплен кем-то другим:

а, так же, краткое описание о товаре и его производителе:

Так же, можно увидеть, что какой-то товар уже кто-то ранее купил и активировал (в этом случае, можно однозначно сделать вывод, что продаваемый товар в магазине либо уже был в употреблении, либо же подделка):

Итак, допустим, вы в магазине убедились, что товар не подделка и не был ранее в употреблении. Вы его приобретаете и приходите домой. Распаковываете и видите внутри коробки другой QR-код, скрытый за светонепроницаемой защитной пленкой с сопроводительной надписью что-то вроде «отсканируй меня для активации товара». Снимаете пленку, сканируете QR-код, нажимаете «Активировать товар»:

затем, вводите (по желанию) свое имя и отзыв к товару, а, так же, задаете пароль (с помощью которого вы позже сможете 1 раз изменить свой отзыв к товару):

И, тогда, минут через 10, информация о покупке этого товара будет публично доступной как на сайте производителя, так и в блокчейне Emercoin, где его может просмотреть любой желающий:
Вы можете сказать: «Причем здесь блокчейн? Такое вполне можно сделать централизованно производителем товаров!». Да, действительно, можно. Но использование децентразизованного хранилища в виде блокчейна обеспечит полную прозрачность над действиями производителей. Так, у них не получится выпустить неучтенный «левый» товар — всё будет публично и открыто. Если для производителя важно быть открытым и честным — то это, однозначно, выбор в сторону решения EMC DPO на базе блокчейна Emercoin.
В этом разделе мы рассмотрим как развернуть и настроить EMC DPO на вашем сервере с ОС Ubuntu 16.04 LTS (amd64). Но, так же, поддерживаются и другие ОС: Ubuntu 14.04 LTS (amd64), Debian 8 (amd64, armhf), RHEL/CentOS 7 (x86_64).
Воспользуемся стандартными средствами для установки Emercoind:
Убедимся, что emercoind установился, работает и начинает скачивать блокчейн:
Дожидаемся, пока блокчейн скачается. Отправляем на кошелек некоторое количество монет (из расчета, примерно, 0.12 EMC на одну операцию по созданию/обновлению инфо в блокчейне).
Создать новый адрес кошелька можно командой:
Необходимо создать записи в NVS блокчейна для производителя (вендора) и, непосредственно, для товаров (отдельная запись для каждой единицы товара).
Определим начальные сведения. Пусть:
Тогда, такую запись можно создать следующей командой:
После выполнения этой команды, получаем код Transaction ID, если всё прошло успешно.
Дожидаемся попадания этой записи в блокчейн. Для этого, выполняем команду:
после попадания в блокчейн, мы должны увидеть что-то подобное:
запоминаем значение поля «address» — это будет основным адресом, от имени которого должны будут созданы все последующие записи продуктов.
Дополнительно, мы должны придумать «соль» паролей пользователей, чтобы осложнить задачу злоумышленникам по перебору паролей — произвольный набор символов. Пусть для примера он будет "
Определим начальные сведения. Пусть:
Тогда, такие записи можно создать при помощи исполнения следующего скрипта (предварительно установив php-cli и pwgen):
где URL — веб-адрес развертывания EMC DPO.
Результатом исполнения этого скрипта станут создание NVS записей (если вы сделали всё правильно) с выводом данных в консоль вида:
Сохраняем Public URL и Private URL для каждого отдельного серийного номера, делаем из них QR-коды и размещаем их: один на внешней стороне коробки, а второй, соответственно, — внутри коробки под защитной пленкой.
Устанавливаем зависимости и активируем нужные модули:
Клонируем git-репозитарий в /var/www:
Устанавливаем composer и его компоненты:
Назначаем владельцем папки emcdpo пользователя www-data (или любого другого, из-под которого веб-сервер будет исполнять код):
Прописываем наши параметры в файл /var/www/emcdpo/engine/src/settings.php:
Учетные данные для подключения к Emercoin RPC можно посмотреть в файле /etc/emercoin/emercoin.conf
Далее, настраиваем веб-сервер. Для этого, создаем конфигурационный файл Apache /etc/apache2/sites-available/emcdpo.conf, пример которого:
Активируем конфигурацию и перезапускаем Apache:
Теперь EMC DPO доступен по адресу:
Знакомо? Что делать и кто виноват? Доверие к производителю часов у вас начинает резко падать. А разве виноват произоводитель часов, что его продукцию подделывают? Спорный вопрос, мне кажется. Так или иначе, очевидно, что контрафакт причиняет огромные репутационные потери и убытки легальным производителям.
Решением может быть использование продукта EMC DPO и блокчейна Emercoin.
Как это может работать:
Представим, вы приходите всё в тот же магазин дорогих часов, выбираете товар, но перед его покупкой видите на коробке QR-код с сопроводительной надписью что-то вроде «отсканируй меня, чтобы убедиться, что я не подделка». Вы сканируете QR-код, который отправляет вас на сайт производителя, где открывается, непосредственно, информация существует ли товар с таким серийным номером и был ли он ранее куплен кем-то другим:

а, так же, краткое описание о товаре и его производителе:

Так же, можно увидеть, что какой-то товар уже кто-то ранее купил и активировал (в этом случае, можно однозначно сделать вывод, что продаваемый товар в магазине либо уже был в употреблении, либо же подделка):

Итак, допустим, вы в магазине убедились, что товар не подделка и не был ранее в употреблении. Вы его приобретаете и приходите домой. Распаковываете и видите внутри коробки другой QR-код, скрытый за светонепроницаемой защитной пленкой с сопроводительной надписью что-то вроде «отсканируй меня для активации товара». Снимаете пленку, сканируете QR-код, нажимаете «Активировать товар»:

затем, вводите (по желанию) свое имя и отзыв к товару, а, так же, задаете пароль (с помощью которого вы позже сможете 1 раз изменить свой отзыв к товару):

И, тогда, минут через 10, информация о покупке этого товара будет публично доступной как на сайте производителя, так и в блокчейне Emercoin, где его может просмотреть любой желающий:
{
"name": "dpo:Your Company:DEMO-1001:0",
"value": "Item=Name of your product\nDescription=The description of your product\nPhoto=http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png\nOTP=bb680a8bcae3e5be23f3c9ed4d3d0e97d42cebe561f53a5a7502e2d150a937fb\nOwner=Garrett\nSecret=3aff84a0afcd7201b112652b8692975bcfdeb0060de5efbdaeb16d806f62848d\nComment=Cool !\nUpdated=1",
"txid": "ee1ed730e16c41c7a42b3b87bf5bd5936b2e69a6448f510e08dd70d40bf57c1e",
"address": "ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema",
"expires_in": 255036,
"expires_at": 471574,
"time": 1488110346
}
Вы можете сказать: «Причем здесь блокчейн? Такое вполне можно сделать централизованно производителем товаров!». Да, действительно, можно. Но использование децентразизованного хранилища в виде блокчейна обеспечит полную прозрачность над действиями производителей. Так, у них не получится выпустить неучтенный «левый» товар — всё будет публично и открыто. Если для производителя важно быть открытым и честным — то это, однозначно, выбор в сторону решения EMC DPO на базе блокчейна Emercoin.
Развертывание EMC DPO на вашем сервере
В этом разделе мы рассмотрим как развернуть и настроить EMC DPO на вашем сервере с ОС Ubuntu 16.04 LTS (amd64). Но, так же, поддерживаются и другие ОС: Ubuntu 14.04 LTS (amd64), Debian 8 (amd64, armhf), RHEL/CentOS 7 (x86_64).
1. Установка службы Emercoind
Воспользуемся стандартными средствами для установки Emercoind:
apt-key adv --keyserver keyserver.ubuntu.com --recv B58C58F4
add-apt-repository 'deb http://download.emercoin.com/ubuntu xenial emercoin'
apt update && apt -y install emercoin
Убедимся, что emercoind установился, работает и начинает скачивать блокчейн:
emc getinfo
{
"version": 60000,
"protocolversion": 70002,
"walletversion": 60000,
"balance": 1.090000,
"newmint": 0.000000,
"stake": 0.000000,
"blocks": 216541,
"moneysupply": 39554119.651462,
"timeoffset": 0,
"connections": 8,
"proxy": "",
"ip": "0.0.0.0",
"difficulty": 206196413.012576,
"testnet": false,
"keypoololdest": 1487850355,
"keypoolsize": 501,
"mintonly": false,
"unlocked_until": 0,
"paytxfee": 0.010000,
"relayfee": 0.000100,
}
Дожидаемся, пока блокчейн скачается. Отправляем на кошелек некоторое количество монет (из расчета, примерно, 0.12 EMC на одну операцию по созданию/обновлению инфо в блокчейне).
Создать новый адрес кошелька можно командой:
emc getnewaddress
2. Создание NVS записей
Необходимо создать записи в NVS блокчейна для производителя (вендора) и, непосредственно, для товаров (отдельная запись для каждой единицы товара).
2.1. Создание главной записи вендора
Определим начальные сведения. Пусть:
- Производитель (вендор) называется «Your Company»
- Логотип вендора находится по ссылке:
http://emercoin.com/images/main-logo.png
- Также, мы хотим создать дополнительное поле «Description» и поместить в него сведения: «The description of your Company»
- Запись будет активной в течение 730 дней
Тогда, такую запись можно создать следующей командой:
emc name_new "dpo:Your Company" "Name=Your Company
Description=The description of your Company
Logo=http://emercoin.com/images/main-logo.png" 730
После выполнения этой команды, получаем код Transaction ID, если всё прошло успешно.
Дожидаемся попадания этой записи в блокчейн. Для этого, выполняем команду:
emc name_show "dpo:Your Company"
после попадания в блокчейн, мы должны увидеть что-то подобное:
{
"name": "dpo:Your Company",
"value": "Name=Your Company\nDescription=The description of your Company\nLogo=http://emercoin.com/images/main-logo.png",
"txid": "b11384b162e2d3d2900d10e942c6ae3aa8bca94801dc119677685d68d35c9712",
"address": "ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema",
"expires_in": 127749,
"expires_at": 343616,
"time": 1487856529
}
запоминаем значение поля «address» — это будет основным адресом, от имени которого должны будут созданы все последующие записи продуктов.
Дополнительно, мы должны придумать «соль» паролей пользователей, чтобы осложнить задачу злоумышленникам по перебору паролей — произвольный набор символов. Пусть для примера он будет "
johNah2koosie3iG
".2.2. Создание записей продуктов
Определим начальные сведения. Пусть:
- Товар называется «Name of your product»
- Фото товара находится по ссылке:
http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png
- Также, мы хотим создать дополнительное поле «Description» и поместить в него сведения: «The description of your product»
- Для начала, мы хотим создать 100 серийных номеров товара: от SN-55001 до SN-55100
- Записи каждого товара будут активными в течение 730 дней
Тогда, такие записи можно создать при помощи исполнения следующего скрипта (предварительно установив php-cli и pwgen):
#!/bin/bash
# Source: https://github.com/snvakula/svtools/blob/master/emcdpo-genbulk.sh
URL="http://emcdpo.info/dpo"
SALT="johNah2koosie3iG"
ADDRESS="ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema"
VENDOR="Your Company"
ITEM="Name of your product"
PHOTO="http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png"
OTHERS="Description=The description of your product"
PREFIX="SN-"
FIRST=55001
LAST=55100
DAYS=730
while [ $FIRST -le $LAST ]; do
echo "Creating serial $PREFIX$FIRST:"
SECRET=$(pwgen 8 1)
OTP=$(php -r "echo(hash('sha256', md5('$SECRET'.'$SALT')));")
echo " * SECRET: $SECRET"
echo " * OTP: $OTP"
echo " * Public URL: $URL/key/$PREFIX$FIRST"
echo " * Private URL: $URL/key/$PREFIX$FIRST?otp=$SECRET"
COUNT=0
while emc name_show "dpo:$VENDOR:$PREFIX$FIRST:$COUNT" >/dev/null 2>&1
do
let COUNT=COUNT+1
done
echo " * NVS Record: dpo:$VENDOR:$PREFIX$FIRST:$COUNT"
VALUE="Item=$ITEM\nPhoto=$PHOTO\n$OTHERS\nOTP=$OTP"
VALUE=$(echo -e "$VALUE")
echo -n " * Transaction ID: "
emc name_new "dpo:$VENDOR:$PREFIX$FIRST:$COUNT" "$VALUE" $DAYS $ADDRESS
echo
let FIRST=FIRST+1
done
где URL — веб-адрес развертывания EMC DPO.
Результатом исполнения этого скрипта станут создание NVS записей (если вы сделали всё правильно) с выводом данных в консоль вида:
Creating serial SN-55001:
* SECRET: maifeB32
* OTP: bb680a8bcae3e5be23f3c9ed4d3d0e97d42cebe561f53a5a7502e2d150a937fb
* Public URL: http://emcdpo.info/dpo/key/SN-55001
* Private URL: http://emcdpo.info/dpo/key/SN-55001?otp=maifeB32
* NVS Record: dpo:Your Company:SN-55001:0
* Transaction ID: 7e1c5a131887a08971225790047bf9e8asq3ca5f947beb9ba0ced6541931939f
Сохраняем Public URL и Private URL для каждого отдельного серийного номера, делаем из них QR-коды и размещаем их: один на внешней стороне коробки, а второй, соответственно, — внутри коробки под защитной пленкой.
3. Развертывание веб-приложения EMC DPO
Устанавливаем зависимости и активируем нужные модули:
apt install curl git apache2 libapache2-mod-php php-xml
a2enmod rewrite
Клонируем git-репозитарий в /var/www:
cd /var/www
git clone https://github.com/Emercoin/emcdpo
Устанавливаем composer и его компоненты:
cd /var/www/emcdpo/engine
curl -sS https://getcomposer.org/installer | php
php composer.phar install --prefer-dist
Назначаем владельцем папки emcdpo пользователя www-data (или любого другого, из-под которого веб-сервер будет исполнять код):
chown -R www-data:www-data /var/www/emcdpo/engine
Прописываем наши параметры в файл /var/www/emcdpo/engine/src/settings.php:
// General Settings
CONST DPO_VENDOR = 'Your Company';
CONST SALT = 'johNah2koosie3iG';
CONST NVS_DAYS = 730;
CONST ALLOWED_UPDATES = 2;
CONST SEARCH_DEPTH = 10;
// Emercoin RPC Settings
CONST RPC_TYPE = "https";
CONST RPC_USERNAME = "emccoinrpc";
CONST RPC_PASSWORD = "RahRoh6ca8chaf6naji9dfaazaeghaidiLooyePi4aeQuah9lai4Eij5gotoocha";
CONST RPC_HOST = "localhost";
CONST RPC_PORT = '6662';
Учетные данные для подключения к Emercoin RPC можно посмотреть в файле /etc/emercoin/emercoin.conf
Далее, настраиваем веб-сервер. Для этого, создаем конфигурационный файл Apache /etc/apache2/sites-available/emcdpo.conf, пример которого:
Alias /dpo /var/www/emcdpo/engine/web
<Directory /var/www/emcdpo/engine/web>
Options -MultiViews
RewriteEngine On
RewriteBase /dpo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</Directory>
Активируем конфигурацию и перезапускаем Apache:
a2ensite emcdpo
systemctl restart apache2
Теперь EMC DPO доступен по адресу:
http://YOURHOSTNAME/dpo
и готов к использованию.