company_banner

Погружение в технологию блокчейн: Борьба с контрафактными товарами

    Продолжаем серию статей о первых в России проектах, разработанных на основе технологии блокчейн. Напоминаем, что мы спросили у команд-участниц хакатона InspiRussia о технологической составляющей их решений.

    В этой материале речь пойдет о проекте Buydentity, который помогает бороться с проблемой контрафактных товаров.



    Цикл статей «Погружение в технологию блокчейн»


    1. Серия материалов, посвященных технологии Emer:
    1.1. Секреты EmerCoin.
    1.2. Децентрализованная нецензурированная система доменных имён.
    1.3. Инфраструктура публичных ключей всемирного масштаба.
    1.4. Децентрализованная беспарольная система безопасности.
    2. Быстрые и безопасные транзакции.
    3. Экосистема цифровой стоматологии.
    4. Борьба с контрафактными товарами.
    5. Взаимное страхование животных.
    6. Что такое ICO и как его провести.
    7. Loading…

    Buydentity: Борьба с контрафактом


    Разработчики проекта Buydentity — это друзья-энтузиасты, которые решили попробовать себя в разработке с помощью блокчейна.

    Участники поставили перед собой задачу разработки полезного проекта, поэтому в результате была выбрана тема по проблеме борьбы с контрафактными товарами. Прежде, чем начать разработку, участниками была проанализирована проблематика оборота контрафактной продукции в мире. Они выяснили, что:

    1. У государств нет системного подхода в области регулирования контрафакта.
    2. Большинству людей достаточно сложно отличить подделку от настоящего товара. Тем более качество подделок с каждым годом становится все выше.
    3. Все чаще стали подделывать востребованные и недорогие товары, а не товары премиум-класса.
    4. Между покупателем и производителем очень длинная цепочка из различных контрагентов и посредников. Невозможно понять каким образом тот или иной товар попал на полки конкретного магазина.

    К тому же, в целом, в мире наблюдается значительный рост рынка контрафакта. Так по данным доклада Организации экономического сотрудничества и развития (ОЭСР):

    • Годовой оборот контрафактной продукции в мире в 2015 году достиг $461 млрд;
    • На долю контрафактной продукции в мире приходится примерно 2,5% мирового импорта;
    • На рынке стран Европейского союза подделки занимают около 5% от общего объема торговли;
    • Наиболее часто подделывают продукцию из США (20%), Италии (15%), Франции и Швейцарии (по 12%), Японии и Германии (по 8%).

    Так и появился проект Buydentity (buy (покупка) и identity (подлинность)). Прототип платформы позволяет отслеживать весь жизненный цикл товара на базе технологии блокчейн, что позволяет исключить создание подделки и проверить подлинность товара в любой момент времени.

    В данный момент существуют и внедрены различные решения для борьбы с контрафактом: 2D barcode, штрих код, голограмма, различные защитные покрытия, секретные чернила, микропечать и защитные микроэлементы, радиочастотные идентификаторы, защитные самоклеящиеся этикетки. Но, все перечисленные выше способы не дают стопроцентной уверенности в том, что перед вами настоящий товар, либо имеют высокую стоимость, либо могут быть подтверждены только самими производителями. Проект Buydentity позволит повысить надежность с помощью обновления информации о товаре на каждом этапе его жизненного цикла от производителя к покупателю понять его характеристики, статус, задействованных контрагентов и исключить продажу подделки или повторную продажу уже реализованного товара.

    Buydentity: Реализация идеи


    Для реализации этой идеи каждый товар должен обладать уникальным кодом отслеживания, который позволит в любой момент времени однозначно идентифицировать его. Например, в самом простом случае это может быть QR-код (также могут применяться NFC-метки), который наклеен на товар. Код связан с идентификационными данными о товаре (цвет, вес, номер изделия, номер партии, фото, дата и место производства, производитель и прочее), которые записаны в приватный блокчейн Ethereum (платформа для создания децентрализованных онлайн-сервисов на базе блокчейна). Такая запись данных о продукции не позволяет изменить его характеристики в любой момент времени и вы сможете проследить весь путь движение товара.

    Описанным выше способом можно пометить все товары и решить проблему их однозначной идентификации. Однако, указанная реализация не решает проблему создания контрафакта. Кто-нибудь может купить один настоящий продукт, копировать и тиражировать QR-код на аналогичные поддельные товары. Выход в данной ситуации следующий: в блокчейн необходимо разместить статус товара и его владельца, который будет меняться в зависимости от стадии его жизненного цикла. Для реализации описанной выше логики в проекте была развернута сеть Ethereum на основе Azure Blockchain as a Service. Они позволили гибко настраивать правила передачи собственности от одного участника к другому.

    Для реализации описанной выше логики в проекте была развернута сеть Ethereum на основе Azure Blockchain as a Service, что позволило гибко настраивать правила передачи собственности от одного участника к другому. Общая схема функционирования приведена ниже.



    В рамках системы Buydentity командой были разработаны:

    • Личный кабинет контрагента. Кабинет позволяет создавать товары и их отдельные единицы, отслеживать статус и перемещение товара, создавать уникальные QR-коды, передавать товар другому контрагенту.
    • Мобильное приложение iOS для проверки подлинности товара. Покупатель сканирует QR-код и видит детальную информацию о товаре на экране своего мобильного телефона.

    Ниже показан примерный вид карточки товара в мобильном приложении.

    Учитывая знания и опыт работы, был выбраны следующий набор технологий для реализации системы:

    • Framework: Angular 2, .Net Framework;
    • Платформа: ASP.NET Core, Microsoft Azure (Ethereum Blockchain as a Service);
    • Языки программирования: C#, TypeScript, JavaScript;
    • База данных: PostgreSQL;
    • Мобильное приложение: Objective-C.

    Ключевые проблемы и их решение


    Для работы с сетью Ethereum команда воспользовалась клиентом Geth, который позволяет подключаться и осуществлять транзакции по протоколу http. Для тестирования и отладки был развернут приватный блокчейн, однако, при попытке доступа к интерфейсу управления с помощью .NET-библиотеки Nethereum, постоянно возникала ошибка подключения к клиенту. Проблема оказалась в устаревшей версии клиента Geth. Кстати, обновления можно найти в репозитории на GitHub.

    Следующая проблема, которая оказалась относительно простой, возникла с подключением клиента Geth к удаленному клиенту в виртуальной машине Microsoft Azure. Как оказалось, она скрывалась не только в клиенте, но и в настройке фаервола виртуальной машины. С этой проблемой можно разобраться с помощью материала по настройке конечных точек виртуальных машин. Для доступа к клиенту Geth извне достаточно указать флаг --wsaddr “0.0.0.0” (по умолчанию localhost).

    Смарт-контракты Ethereum были выбраны не случайно — синтаксис языка Solidity несложный, очень похож на JavaScript и можно сказать, что подобен языку C. Поэтому первая версия контракта была быстро реализована и проверена с помощью веб-IDE.

    Далее для каждого товара мы создаем смарт-контракт, в котором хранится информация о товаре, а также цепочка всех звеньев цепи от производителя до конечного продавца. Осуществить передачу собственности на товар может только предыдущий владелец, указанный в контракте. При получении товара, новый владелец подтверждает свое право собственности через тот же самый контракт.

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

    pragma solidity ^0.4.0:
    contract ProductItem {
        address[] _owners;
        address _currentOwner;
        address _nextOwner;
        string _productDigest;
    
        function ProductItem(string productDigest) {
            _currentOwner = msg.sender;
            _productDigest = productDigest;
            _owners.push(msg.sender);
        }
    
        function setNextOwner(address nextOwner) returns(bool set) {
            if (_currentOwner != msg.sender) {
               return false;
            }
            _nextOwner = nextOwner;
            return true;
        }
    
        function confirmOwnership() returns(bool confirmed) {
            if (_nextOwner != msg.sender) {
                return false;
            }
            _owners.push(_nextOwner);
            _currentOwner = _nextOwner;
            _nextOwner = address(0);
            return true;
        }
    }
    

    Здесь:

    • _owners — массив всех владельцев единицы товара;
    • _currentOwner — текущий владелец товара;
    • _nextOwner — следующий владелец товара;
    • _productDigest — хеш, вычисленный на основе некоторых полей товара. При проверке позволит проверить неизменность описания товара;
    • msg.sender — встроенная переменная окружения, в которой содержится инициатор транзакции.

    При создании единицы товара информация заносится в блокчейн в виде контракта, приведенного выше. Смарт-контракт невозможно обмануть, поэтому передать единицу товара в собственность сможет только тот, кто указан в переменной _currentOwner контракта. Далее, при передаче собственности, вызывается функция setNextOwner(address next), устанавливая следующего возможного владельца. Когда следующий владелец принимает товар в собственность, вызывается метод confirmOwnership().

    Как было сказано выше контракт невозможно обмануть не имея доступ к кошелькам (то есть фактически к приватным ключам) участников системы. Для того, чтобы минимизировать компрометацию пользовательских кошельков они размещены на приватном сервере внутри облака Azure. Для вычисления блоков в Ethereum развернуты несколько серверов, используя отдельный шаблон (можно найти здесь). Клиенты go-ethereum, автоматически установленные при разворачивании шаблона, связаны между собой в сеть (как это сделать описано здесь). В общем виде, архитектура приложения выглядит следующим образом:

    Запросы, предполагающие работу с Ethereum, перенаправляются в очередь. Затем эти сообщения обрабатываются отдельными сервисами. Реализация выглядит именно так, потому что фиксация транзакций, изменяющих состояние контракта, довольно затратная по времени операция и пользователю не обязательно дожидаться завершения этих операций.

    Работа с Ethereum


    Поскольку языком разработки backend в проекте является C#, то для взаимодействия с Ethereum была выбрана библиотека Nethereum. Ниже приведен пример публикации контракта в блокчейн:

    public async Task<Contract> DeployContractAsync(EthereumAccount account, ContractMetadata metadata, HexBigInteger gas = null, params object[] ctorArgs)
            {
                gas = gas ?? new HexBigInteger(10*1000*1000);
                var tx = await _web3.Eth.DeployContract.SendRequestAsync(metadata.Abi, metadata.ByteCode, account.Address, gas, ctorArgs).ConfigureAwait(false);
                var receipt = await MineAndGetReceiptAsync(tx).ConfigureAwait(false);
                var code = await _web3.Eth.GetCode.SendRequestAsync(receipt.ContractAddress).ConfigureAwait(false);
    
                if (string.IsNullOrEmpty(code) || code.Length < 3)
                {
                    throw new InvalidOperationException("Can't deploy contract. Check if gas is sufficient");
                }
    
                return _web3.Eth.GetContract(metadata.Abi, receipt.ContractAddress);
            }
    
    public async Task<TransactionReceipt> MineAndGetReceiptAsync(string txHash)
            {
                TransactionReceipt receipt = await _web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash).ConfigureAwait(false);
    
                while (receipt == null)
                {
                    receipt = await _web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash).ConfigureAwait(false);
                    await Task.Delay(1000).ConfigureAwait(false);
                }
    
                return receipt;
            }
    

    Здесь не стоит обращать внимания на типы данных, наподобие EthereumAccount и ContractMetadata, так как основная идея должна быть понятна. Стоит обратить внимание на строчку:

    var code = await _web3.Eth.GetCode.SendRequestAsync(receipt.ContractAddress)

    При публикации контракта иногда может возникнуть исключение о недостаточном gas. Чтобы убедиться в успешной публикации контракта мы проверяем результат вышеприведенного кода:

    if (string.IsNullOrEmpty(code) || code.Length < 3)
           {
               throw new InvalidOperationException("Can't deploy contract. Check if gas is sufficient");
           }

    Ethereum blockchain очень удобен наличием «умных» контрактов, однако для приватных блокчейнов было бы актуально минимизировать время формирования блоков в базе данных, поэтому в данный момент команда ищет пути для решения данной проблемы.

    Планы на будущее


    Команда Buydentity после проведения хакатона активно начала развивать свой проект и представлять его на различных форумах и публичных мероприятиях. Подробную информацию о проекте можно найти на сайте.

    На ближайшее будущее команда определила следующие основные задачи:

    • Интеграция Buydentity с Offchain системами производителей и ритейлеров, что позволит быстро встраивать наше решение в уже существующие бизнес-процессы;
    • Расширение способов маркировки товара: RFID-метки, NFC-чипы, лазерная маркировка и так далее;
    • Разработка конструктора создания товаров для внесения максимально широкого перечня данных о продукции;
    • Соответствие существующим международным стандартам маркировки продукции;
    • Отслеживание подозрительных сканирований товара и отправка жалоб на контрафактный товар.

    Сейчас команда проекта ищет производителей продукции для пилотного внедрения. По вопросам работы системы можно написать на mail@buydentity.ru.
    Метки:
    Microsoft 387,40
    Microsoft — мировой лидер в области ПО и ИТ-услуг
    Поделиться публикацией
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое