Какой формат файлов используется при добавлении hard token
Со временем блокчейн всё сильнее проникает в нашу жизнь, и появляется необходимость понимать основные его технологии, в том числе работу децентрализованных приложений (dApps). Большинство dApps в данный момент создано на Ethereum, возможности которого гораздо более гибкие, чем выпуск привычных ERC20 токенов.
Зачем нужны стандарты
Внутри смарт-контракта (что это?) можно прописать уникальную механику токена. Он будет работать, но другие разработчики (и смарт-контракты) не смогут обращаться к нему с помощью универсальной логики.
Пример: вы создали токен для игрового предмета (децентрализованный гейминг сейчас активно развивается) и хотите, чтобы он мог торговаться на маркетплейсах для игровых предметов (каком-нибудь таком). Но маркетплейсы не знают, как обращаться к функциям внутри вашего контракта, им нужен отдельный смарт-контракт, чтобы поддерживать ваш токен.
На помощь приходят стандарты. Зная способы взаимодействия с ними, создатели других dApps заложили в код всё необходимое для работы с токеном на опредёленном стандарте.
Как появляются стандарты
Ethereum является open-source проектом (кстати, ERC — это Ethereum Request for Comments), поэтому логично, что новый стандарт токена может предложить любой пользователь. Если стандарт решает какую-то важную проблему, то он может стать официальным стандартом Ethereum (то есть попасть в этот список).
Взаимозаменяемые и не взаимозаменяемые токены
Отправной точкой для классификации стандартов токенов является их взаимозаменяемость или её отсутствие. Fungible (взаимозаменяемые) токены равны друг другу, их можно использовать в качестве валюты. Semi-fungible (на половину взамозаменяемые) токены почти неотличимы друг от друга, но всё-таки уникальны (пример: билеты в кинотеатре, стоимость может быть одна, но место у каждого точно уникальное). Non-fungible (не взаимозаменяемые) токены полностью уникальны, токенизированный объект в единственном экземпляре (пример: объекты авторского права).
Eсли не узнаёте котёнка, то это одна из первых игр на Ethereum (и стандарте ERC-721), CryptoKitties.
ERC-20
Самым известным стандартом взаимозаменяемых токенов является ERC20, который предложил автор идеи Ethereum Виталик Бутерин ещё в 2015. Этот токен широко используется для проведения разных типов initial offering (первое предложение). Я избегаю терминов ICO и IEO, потому что теперь это далеко не единственные способы провести публичное размещение токенов (но статья не об этом).
Специфика: взаимозаменяемый стандарт, есть тикер для бирж, делимый (количество знаков после запятой определяет создатель смарт-контракта), обязательно имеет total supply (количество токенов, больше которого выпустить нельзя).
Про ERC-20 написано уже много (Decentraland, Binance Collectibles, вот примеры ERC-721.
ERC-721 был предложен как EIP (предложение по улучшению Ethereum) Дитером Ширли в 2017, стал официальным в 2018.
Специфика: не взаимозаменяемый стандарт, нет тикера, неделимый, обязательно существует только в единственном экземпляре.
ERC-721, как и ERC-20 широко распространен, поэтому не буду останавливаться на нём.
ERC-777
Этот формат является «усовершенствованием» привычного ERC-20. Он обратно совместим с ERC-20, но имеет несколько преимуществ:
- при обмене токенов использует одну транзакцию вместо двух в ERC-20;
- автоматически отменяет транзакции на несовместимые контракты;
- возможность помечать неблагонадёжные адреса;
- возможность назначать операторов (адреса, имеющие право отправлять токены с другого адреса);
- ускоренное проведение транзакций.
ERC-223
Также является «усовершенствованием» ERC-20, предотвращая отправку транзакций на случайные контракты. Если смарт-контракт не имеет функций, предусматривающих работу с токенами, то они возвращаются отправителю.
ERC-1155
Идею этого стандарта предложили разработчики проекта Enjin в 2018. Enjin — проект, стремящийся к упрощению создания игр на Ethereum. Поэтому предложенный ими стандарт стоит сначала рассмотреть как игровой, хотя его применение этим не ограничивается.
- позволяет выпускать несколько токенов в одном контракте;
- токены в одном контракте могут быть fungible и non-fungible одновременно;
- поддерживает атомарные свопы;
- поддерживает «batch» транзакции;
- не для всех транзакций нужно ждать окончания блока.
Атомарные свопы
Одной из причин непринятия повсеместно блокчейна является невозможность быстро и эффективно (в плане комиссий) обменивать одни токены на другие (а количество различных токенов все время увеличивается). Решение проблемы уже создано — это атомарные свопы. Обычно под Atomic swaps понимают технологию децентрализованного обмена между криптовалютами разных самостоятельных блокчейнов (об этом неплохо написано на BitcoinWiki). Но также стоит рассматривать атомарные свопы и в контексте обмена токенов внутри смарт-контракта.
Картинка из блога Enjin иллюстрирует своп множественных токенов на стандарте ERC-1155.
А batch transactions хоть и не экономят время, зато экономят газ (что это?), записывая в сеть несколько транзакций, как одну.
Стоит упомянуть, что хоть ERC-1155 получил большее распространение, он многое перенял от ERC875, появившегося несколькими месяцами ранее. ERC-875 предлагал тот же функционал, кроме поддержки fungible токенов.
ERC-865
Стандарт, аналогичный ERC-20, но использует для комиссий не газ, а сами токены. Из-за сложной системы оплаты комиссии газом (цена газа выбирается самостоятельно), а иногда и непредсказуемости размера комиссии, такое улучшение может быть очень полезно для принятия токенов на Ethereum.
Ссылки
Криптографический токен и зачем стандартизировать формат его хранения
Криптографический токен - портативное устройство, способное хранить криптографические учетные данные, идентифицирующие его владельца (например, смарт-карты). Они отлично подходят для обеспечения безопасности и приватности в приложениях. На них может храниться в защищенном формате важная информация, такая как пароли, секретные ключи, закрытые ключи и т.д.
Токены предоставляют изолированное пространство, в котором можно обрабатывать чувствительную информацию, чтобы не открывать ее в самих приложениях, подверженных различным атакам.
Формат токена – это подробное описание того, как некоторые абстракции более высокого уровня, такие как ключи и сертификаты, представлены на токене, например, в виде структуры данных, содержимого файла, структуры каталогов и т.д.
Может возникнуть очевидный вопрос: зачем стандартизировать формат токенов, если и так существуют стандартизированные API между приложениями и токенами? Дело в том, что разные приложения все еще используют разные API для общения с токенами. Другими словами, многие приложения привязаны к конкретным токенам, а токены привязаны к конкретным приложениям. Стандартизация формата токена позволяет приложениям, поддерживающим разные API, сосуществовать на одном токене.
обеспечивает функциональную совместимость компонентов, работающих на различных платформах
позволяет приложениям использовать преимущества продуктов от различных производителей
позволяет использовать самые последние технологии без необходимости переписывать программное обеспечение
поддерживает все современные стандарты из смежных областей, дополняя их только там, где это необходимо
Например, благодаря этому стандарту владелец смарт-карты, на которой будет храниться сертификат цифровой подписи, будет иметь возможность предоставить его на любой машине и любому программному обеспечению.
В стандарте описано четыре основных класса: ключи, сертификаты, объекты аутентификации и объекты данных (например, объект информации о самом токене). У всех объектных классов есть свои подклассы. Например, класс ключей имеет подклассы закрытых ключей, открытых ключей и секретных ключей, каждые из которых уже являются объектами, хранящимися непосредственно в токене.
Объекты могут быть закрытыми, т.е. защищенными от несанкционированного доступа, или открытыми. В случае смарт-карт, любой доступ (чтение, запись и т.д.) к закрытым объектам определяется объектами аутентификации (в которых также определяются и процедуры аутентификации). Для держателя карты доступ производится на основе некоторой информации или биометрических данных. Открытые объекты не защищены от несанкционированного чтения. Защита от записи открытых объектов зависит от конкретной имплементации.
Примеры поддерживаемых объектов
В стандарте описаны правила хранения ключей и сертификатов многих популярных криптографических алгоритмов:
Чтобы вам было проще понять эту информацию, перед её прочтением желательно:
Исходя из определения из Википедии:
Про APDU
APDU — “язык ассемблера” для устройств.
Более подробно об APDU-формате написано в этой статье, мы же опишем его проще. APDU-формат описывает способ общения с различными устройствами с помощью байтовых последовательностей. На практике это происходит следующим образом:
Токену или смарт-карте посылается байтовая последовательность;
Операционная система устройства обрабатывает эту последовательность в команду и посылает в ответ код возврата и, при необходимости, дополнительную информацию.
Работать с шестнадцатеричными байтовыми последовательностями весьма неудобно, каждый раз надо заглядывать в спецификацию команд. Хотелось бы иметь их текстовый эквивалент, а лучше целую библиотеку для разработки.
Репозиторий с примерами
Чтобы улучшить понимание представленных ниже примеров рекомендуем:
Выполнить настройку системы согласно README.
Попробовать собрать примеры.
Отформатировать устройство семейства Рутокен ЭЦП 2.0 с помощью примера ex0_format_token.
Цикл работы с токеном
Внутри заголовочного файла utils.h находится описание функций init_pkcs11, free_pkcs11, get_slot_list. Их определение мы дадим ниже.
Всю работу с токеном можно разделить на три этапа:
Подготовительный этап
Мы реализовали его внутри функции init_pkcs11:
Здесь происходит следующее:
Потом мы вызываем полученную функцию C_GetFunctionList и получаем уже саму структуру указателей на функции.
С помощью функции C_Initialize инициализируется загруженная библиотека. Функция C_Initialize в качестве аргумента принимает параметры инициализации библиотеки. Подробнее о них можно почитать здесь, для нас же важен флаг CKF_OS_LOCKING_OK. Его необходимо использовать, если мы хотим использовать библиотеку в нескольких потоках. В нашем примере мы могли бы опустить этот флаг.
Основной этап
Основной этап можно разделить на работу со слотами и работу внутри сессии
Этап работы со слотами
Слот — это дескриптор виртуального интерфейса, куда подключен токен. Конкретно в нашем примере весь этап работы со слотами уместился в определение одной функции get_slot_list:
Работа со слотами происходит примерно в такой последовательности:
Получение списка слотов с помощью функции C_GetSlotList или через функцию ожидания событий, связанных со слотами (пример будет рассмотрен ниже).
Выполнение различных функций работы со слотами. В нашей программе этот этап отсутствует, но его пример можно найти здесь для функции форматирования устройства C_EX_InitToken. Подробнее функции работы со слотами будут описаны ниже.
Этап работы внутри сессии
Сессия — это дескриптор контекста выполнения последовательности операций. Обычно во время сессий выполняются основные функции работы с токеном или смарт-картой: шифрование, подпись и т.п. В нашем случае выполняется смена PIN-кода:
Работу внутри сессий можно разделить на несколько этапов:
Открытие сессии в слоте с помощью функции C_OpenSession.
Аутентификация пользователя с помощью функции C_Login. Стандартно на Рутокене присутствуют два пользователя: Администратор (CKU_SO) и Пользователь (CKU_USER). Аутентификация на устройстве — не является обязательной операцией. Она нужна, когда мы хотим получить доступ к операциям и объектам, которые требуют наличия соответствующих прав доступа. В нашем случае, это операция смены PIN-кода Пользователя.
Выполнение различных функций по работе с сессиями. В нашем случае это функция C_SetPIN.
Далее по нисходящей могут идти операции сброса прав доступа (C_Logout) и завершения сессии (C_CloseSession).
Завершающий этап
Весь наш завершающий этап поместился внутри определения функции free_pkcs11:
Завершающий этап можно разделить на:
Деинициализацию библиотеки с помощью функции C_Finalize.
Выгрузку библиотеки из памяти процесса через функцию FreeLibrary (для Linux-систем имеется обертка).
Стандартные функции и функции расширения
Стандартные — те, что явно описаны в стандарте. Список указателей на эти функции можно получить с помощью функции C_GetFunctionList, хранящейся в этой же библиотеке. Сами же стандартные функции имеют префикс "C_".
Расширения — те, что были добавлены разработчиками библиотеки и не описаны в стандарте. Стандарт явно не определяет функцию для получения списка расширенных функций. Но в библиотеке rtpkcs11ecp этой функцией является C_EX_GetFunctionListExtended. Сами же функции-расширения обычно имеют префикс "C_EX_".
Разделение по предназначению
Функции общего назначения. Например, для получения списка функций или получения информации о библиотеке.
Функции работы со слотами. Они не зависят от контекста работы с токеном. Например, C_GetSlotInfo, C_GetTokenInfo и т.п.
Функции для работы с сессиями. Как уже говорилось ранее, обычно во время выполнения этих функций осуществляется основное взаимодействие с токеном. При выполнении функции внутри сессии контекст работы с токеном не теряется. Самый простой пример этих функций: функция аутентификации (C_Login), функции работы с закрытым ключом на токене (C_Sign, C_Encrypt) и т.п.
Атомарные и составные операции
Работа со слотами
Получение списка слотов
Первый вызов функции C_GetSlotList позволяет получить количество доступных слотов. Это позволяет в дальнейшем выделять память под необходимое количество слотов. Второй вызов позволяет получить список слотов.
Первым аргументом C_GetSlotList является флаг, говорящий библиотеке, возвращать ли только слоты с подключенными устройствами (CK_TRUE) или нет (CK_FALSE).
Мониторинг событий слотов и получение информации о слоте
Тем не менее, хоть функция C_GetSlotList и является самой часто используемой, она неудобна при написании приложений, которые хотят динамически следить за состоянием слотов. Особенно это может быть критично при написании многопоточных приложений. На помощь может прийти функция мониторинга событий слотов C_WaitForSlotEvent. Она прерывает свою работу при любом изменении состояния какого-либо слота и возвращает идентификатор измененного слота. Работа с этой функцией выглядит примерно следующим образом:
Первым аргументом в функцию C_WaitForSlotEvent передается флаг блокировки (CKF_DONT_BLOCK). Если он установлен, то функция не является блокирующей. В таком случае, если никакой слот не был изменен, то возвращается код CKR_NO_EVENT.
Также стоит обратить внимание на использование функции получения информации о слоте C_GetSlotInfo. Мы использовали ее для определения наличия токена по флагу CKF_TOKEN_PRESENT. Подробнее с этой структурой можно ознакомиться здесь.
В этом файле представлен пример получения информации о подключенных токенах или смарт-картах с помощью функции C_GetTokenInfo. С помощью этой функции можно получить серийный номер, метку и другие характеристики подключенного устройства.
Объекты
Создание объектов — на примере генерации ключевых пар
В этом примере для нас много нового. Можно заметить, что здесь вызывается всего одна функция C_GenerateKeyPair. Эта функция является стандартной функцией генерации ключей, работающей внутри открытой сессии. Также стоит отметить, что пользователь должен быть аутентифицирован перед вызовом этой функции.
Cryptoki recognizes a number of classes of objects, as defined in the CK_OBJECT_CLASS data type. An object consists of a set of attributes, each of which has a given value. Each attribute that an object possesses has precisely one value.
То есть стандарт не даёт явное определение объекта, но из того, что там написано, мы знаем:
объект относится к определенному классу;
объект состоит из множества атрибутов, имеющих заданное значение;
каждый атрибут имеет ровно одно значение.
Также в стандарте представлена классификация объектов:
Заголовок диаграммы определяет класс объекта, а то что ниже — некоторые из его атрибутов.
Видно, что объектом может являться некоторый механизм (о механизмах мы поговорим позже), встроенные функции токена (Hardware feature), некоторые данные на токене (Storage). В нашем случае мы выполнили действие с данными.
Название всех атрибутов начинается с префикса "CKA_". Одним из самых важных атрибутов является CKA_ID. Он задаёт идентификатор объекта и используется для связи ключевых пар и сертификатов. Атрибут CKA_TOKEN является булевым и показывает, является ли объект — объектом токена. Атрибут CKA_PRIVATE тоже является булевым и определяет нужна ли предварительная аутентификация для получения доступа к объекту. Атрибут CKA_ID — задаёт шестнадцатеричный идентификатор объекта. Также есть булевые атрибуты CKA_MODIFIABLE, CKA_COPYABLE, CKA_DESTROYABLE для более тонкой настройки доступа к объекту. Подробнее про возможные атрибуты конкретных классов объектов можно прочитать непосредственно в самом стандарте для каждого класса объектов.
Объекты данных могут быть самыми разнообразными: асимметричные ключи, симметричные ключи, сертификаты, просто какая-либо информация на токене. В нашем примере мы создали два объекта, но сделали это неявно с помощью механизма генерации ключей. C_GenerateKeyPair приняла на вход механизм генерации ключевой пары, шаблоны открытого и закрытого ключа и с помощью механизма сгенерировала объекты ключевой пары (publicKey и privateKey). Мы пока ещё не описывали механизмы, но, говоря простым языком, механизм — это идентификатор операции, которая выполняет какую-то криптографическую функцию. В нашем случае — это функция генерации объекта.
Поиск объектов и создание сырой подписи
В прошлом разделе мы сгенерировали ключевую пару. На этот раз будем считать, что у нас нет хендлов на сгенерированные ключи, но мы знаем их идентификатор – CKA_ID. Попробуем найти объект закрытого ключа на токене:
Данный пример иллюстрирует работу с функцией поиска объекта по заданным атрибутам. Как можно заметить, операция поиска объекта на токене является составной и работа с ней сводится как минимум к вызову трёх функций: C_FindObjectsInit, C_FindObjects, C_FindObjectsFinal. Функция C_FindObjects может вызываться по несколько раз, и каждый раз она будет возвращать следующие объекты поиска. Предпоследний аргумент функции C_FindObjects задаёт размер выходного массива объектов. А последний — количество полученных объектов после очередного поиска.
Поиск приватного ключа производился по атрибуту его класса и идентификатору. Мы рассчитывали, что найдётся хотя бы один объект по заданному шаблону и брали любой из них. Используем найденный ключ для вычисления сырой подписи:
В этом примере подпись и хеш можно считать одновременно. Такой вариант рекомендован для безопасности: цепочку "хеширование-подпись" лучше не «разрывать». Чтобы показать, какой алгоритм хеширования использовать, мы передали его OID.
Также имеется возможность считать сырую подпись в два этапа: сначала брать хеш от данных, а затем вычислялась подпись от хеша. Такой подход более модульный, т.к. алгоритмы хеширования и вычисления подписи могут быть любыми и их можно комбинировать. Естественно, комбинировать можно с некоторыми ограничениями, которые налагаются стандартами, например, на длину хеша.
Работа с функциями расширения на примере создания запроса на сертификат
Можно заметить, что работа с функциями расширения очень похожа на работу со стандартными функциями. Основное отличие лишь в том, что мы обращаемся к другому списку функций CK_FUNCTION_LIST_EXTENDED_PTR. Создание запроса на сертификат происходит в одну строчку функцией C_EX_CreateCSR и возвращает запрос в DER-формате. Также стоит обратить внимание, что память, выделенную внутри библиотеки, следует высвобождать с помощью функции C_EX_FreeBuffer.
По полученному запросу можно получить сертификат в Удостоверяющем центре. Например, воспользуемся тестовым УЦ КриптоПро для получения сертификата. Полученный сертификат необходимо скачать в DER-формате, сохранить в файле с именем "cert_2012-256.cer" и положить в директорию, из которой вы запускаете примеры. Полученный сертификат можно импортировать на токен.
Импорт сертификата на токен. Создание объекта вручную
Сертификаты на токене так же как и ключи — являются объектами. Сертификат можно импортировать на токен, создав объект с нужными атрибутами. Для этого мы реализовали функцию: import_cert:
На этот раз мы создали объект напрямую с помощью функции C_CreateObject. Для создания объекта сертификата мы аналогично передали шаблон с атрибутами объекта: тело сертификата, идентификатор, тип доступа, тип сертификата и т.п.
Функцию C_CreateObject можно использовать не только для создания сертификата на токене, но и для создания других объектов, например, публичных ключей (CKO_PUBLIC_KEY), закрытых ключей (CKO_PRIVATE_KEY), симметричных ключей (CKO_SECRET_KEY), обычных данных (CKO_DATA). Их значение будет также содержаться внутри атрибута CKA_VALUE.
Теперь, когда у нас на токене имеется и ключевая пара и сертификат, для закрепления материала рассмотрим операцию создания CMS-подписи.
Формирование CMS-подписи
Данная возможность является расширением библиотеки Рутокен и может работать только с ГОСТ-ключами. Для создания подписи в формате CMS требуется наличие закрытого ключа и сертификата (неявно содержащего в себе открытый ключ). Создание CMS-подписи реализовано в функции sign_cms:
Получение и установка атрибутов публичных объектов
В завершение главы про объекты хотелось бы отметить, что атрибуты публичных объектов можно получать и изменять. Делается это с помощью функций C_SetAttributeValue и C_GetAttributeValue.
Логика работы с функцией C_SetAttributeValue очень похожа на логику создания объектов — создаётся шаблон, атрибуты заполняются указанными значениями. Все это передаётся на вход функции C_SetAttributeValue. Изменять атрибуты можно, если у объекта атрибут CKA_MODIFIABLE равен CK_TRUE.
При получении значений атрибутов иногда неизвестно, какой будет выходной размер атрибута. В таком случае создается шаблон с нулевыми значениями указателей на выходные объекта атрибутов и их размеров. Этот шаблон передаётся функции C_GetAttributeValue. Функция заполняет значение выходных размеров атрибутов в этом шаблоне. Мы может воспользоваться этой информацией для выделения памяти под атрибуты в шаблоне и дальнейшего вызова функции C_GetAttributeValue.
Для демонстрации работы функций C_GetAttributeValue и C_SetAttributeValue рассмотрим пример получения тела сертификата и изменения текстовой метки сертификата:
Про механизмы
Отсюда следует, что механизмы:
Определяют некоторое криптографическое преобразование.
Согласно документации механизмы можно разделить на:
Механизмы шифрования и расшифрования (Encrypt & Decrypt);
Механизмы подписи и проверки подписи (Sign & Verify);
Механизм формирования хеша (Digest);
Механизм генерации симметричных и асимметричных ключей (Gen. Key/Key Pair);
Экспорт и импорт ключей (Wrap & Unwrap);
Выработка общего ключа на основе асимметричных ключей (Derive).
Каждый механизм идентифицирует одну или несколько из этих функций. Так, например, ранее рассмотренный механизм CKM_GOSTR3410_KEY_PAIR_GEN предназначен для генерации ключей, а механизм CKM_AES_ECB может использоваться как для зашифрования/расшифрования, так и для свертки/развертки ключей.
Идентификатор механизма (mechanism);
Указатель на параметры механизма (pParameter);
Длина в байтах параметров механизма (ulParameterLen).
В этом примере стоит обратить внимание на то, как передаётся вектор инициализации механизму шифрования. Стоит заметить, что после вызова функции C_Encrypt вызывать функцию C_EncryptFinal не нужно: для многих механизмов вызов C_Encrypt эквивалентен последовательному вызову функций C_EncryptUpdate и C_EncryptFinal.
Проверка поддержки механизмов
Ранее в примерах мы всегда надеялись на то, что токен поддерживает используемые механизмы, но, вообще говоря, — это может быть не так. Так, например, Рутокен Lite не поддерживает криптографические механизмы. Поэтому перед началом работы с каким-либо механизмом желательно убедиться в том, что он поддерживается устройством. Это можно сделать с помощью функции C_GetMechanismList, которая возвращает список поддерживаемых механизмов токена. Напишем удобную обертку для проверки поддержки определенного механизма:
Эта обертка удобна для одноразовой проверки поддержки механизма. Если же мы хотим проверить поддержку сразу нескольких механизмов, то лучше получить список поддерживаемых механизмов токена один раз и проверить наличие требуемых механизмы. Это позволит сократить количество обращений к токену и время работы программы, соответственно.
Утилита pkcs11-tool
Генерация ключевых пар:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B --id 45 -l
Создание сырой подписи:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --sign --id 45 -l -i file.txt --mechanism GOSTR3410-WITH-GOSTR3411-12-256
Генерация псевдослучайных последовательностей:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --generate-random 16
Получение списка объектов на токене:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Получение механизмов, поддерживаемых токеном:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -M
Список не является исчерпывающим, более подробно о полных возможностях утилиты можно прочитать в мануале.
Дополнительный материал
Выводы
OpenSSL API (pkcs11 engine, rutoken engine);
C++ с использованием библиотеки pki-core;
Если вы хотите узнать про какую-то реализацию подробнее, то напишите в комментариях и мы постараемся в ближайшее время выпустить новую статью с её разбором.
Hard Protocol – децентрализованный рынок кредитования, построенный на базе Kava. Изначально поддерживает депозиты в BTC, XRP, BNB, BUSD, USDX, в дальнейшем будет также поддерживать кредиты с избыточным обеспечением. Токен HARD – собственный токен управления протоколом, который планируется также использовать как вознаграждение поставщикам ликвидности.
Проект поддерживается гигантами индустрии Binance, Bitmax.
C 3 ноября 2020 года токен HARD доступен для фарминга в рамках площадки Binance Launchpool. В раздаче участвуют пользователи, которые вложили средства в пулы BNB, KAVA или BUSD и удерживают их до тридцати дней. Листинг и открытие торговли в парах HARD/BTC, HARD/BNB, HARD/BUSD и HARD/USDT назначены на 6 ноября (9:00 по Москве).
Общая информация
Суть протокола
Hard Protocol – денежный кросс-чейн рынок, предоставляющий возможность децентрализованного заработка на криптовалютных активов. В частности, предоставит пользователям возможность зарабатывать при помощи таких монет, как BTC, KAVA, BNB, XRP, BUSD, USDX. Меры безопасности полностью предоставлены блокчейном Kava (валидаторы, мосты для передачи средств, партнерские сервисы, такие как оракулы Chainlink).
Три разновидности работы с протоколом:
- Поставка ликвидности с процентным заработком на своих активах.
- Заимствование – пользователь вкладывает одни активы, чтобы получить под их залог другие.
- Доходное фермерство. За действия на платформе и кредиторы, и заемщики получают токены HARD.
Поскольку Hard Protocol построен на Kava, он имеет доступ к любому активу в блокчейне Kava. Кроме того, будучи открытом и неограниченным приложением, протокол доступен любому человеку в любой точке мира. Различные криптобиржи, финтех-приложения и прочие финансовые институты могут свободно интегрировать инструменты денежного рынка Hard Protocol и предоставлять возможности для заработка и кредитования своим пользователям.
Роль токенов KAVA
Изначально разработчики Hard Protocol рассматривали возможность использовать для управления приложением токены KAVA. Есть три причины, по которым от этого варианта отказались:
- Развитие Hard должно управляться участниками, которые используют его, а не всеми, кто взаимодействует с блокчейном KAVA. Вероятность успеха в долгосрочной перспективе снижается, если смешивать управление целым блокчейном с управлением конкретным приложением.
- Токен KAVA планируется оставить как резервный актив, который будет нести ответственность за рекапитализацию кредитного протокола. Поэтому подрывать его ценность в этой роли было бы неразумно.
- Современный рынок DeFi ориентирован на доходность, поэтому в нем должны присутствовать стимулы для поставщиков ликвидности и заемщиков. Следовательно, проекту изначально нужен определенный запас токенов. Для этого пришлось бы существенно увеличить запас KAVA (более чем на 50% от имеющегося предложения). Это привело бы к снижению ценности и негативно отразилось на всех держателях этого токена.
За предоставление безопасности и кросс-чейн инфраструктуру Hard Protocol (и другие приложения на этом блокчейне) теоретически должны обеспечить компенсацию стейкерам Kava. Поэтому пользователи биржи Binance смогут получить некоторое количество токенов HARD в качестве бонуса за депозит Кава.
Токен HARD на Binance Launchpool
Для обеспечения постоянной эволюции приложения и сохранения надлежащего уровня децентрализации любые современные приложения децентрализованных финансов должны предоставлять стимулы для пользователей. Токен HARD выступает во-первых в качестве стимула, а во-вторых для распределения права голоса между участниками сообщества. Все его держатели в совокупности несут ответственность за управление важными параметрами протокола, к примеру, устанавливают уровень комиссионных сборов или определяют вознаграждения между всеми поддерживаемыми активами. Токены HARD также будет использоваться для стимулирования ранних участников.
Максимальная эмиссия HARD составляет 200 000 000 шт. Распределение:
- 63,5% казначейство
- 4% на развитие экосистемы
- 25% разработчикам
- 7,5% на Binance Launchpool
График выпуска:
3 ноября 2020 началось распределение токена HARD на Binance Launchpool, которое продлится на протяжении 30 дней. Поддерживаемые пулы:
- BNB: 3 600 000 HARD (60%)
- BUSD: 600 000 HARD (10%)
- KAVA: 1 800 000 HARD (30%)
В скором времени (6 ноября) запланирован листинг токена на Бинанс.
Преимущества и недостатки
- Протоколы кредитования – одно из самых перспективных направлений в DeFi.
- Поддержка топовых криптовалют уже на первом этапе запуска.
- Сильное сообщество пользователей блокчейна Кава.
- Поддержка от крупных криптовалютных бирж.
- Уже работающий проект с поддержкой кошельков Trust Wallet и Ledger.
- Функционал еще дорабатывается. Следующий этап развития запланирован на конец декабря.
Заключение
Hard Protocol в некотором роде является логическим дополнением в полноценной DeFi экосистеме, в настоящий момент формирующейся вокруг Kava. Дает интересные возможности для заимствования и кредитования популярных валют на гибких условиях. Сообщество Kava – одно из самых активных в криптографической среде, поэтому хорошо подходит для запуска новых проектов.
HARD Protocol - это децентрализованный денежный рынок, построенный на Kava, который позволяет кредитовать и брать в долг межсетевые активы. HARD Protocol поддерживает депозиты на стороне предложения для BTC, XRP, BNB, BUSD и USDX. Платформа позволяет получать займы с высоким обеспечением для поддерживаемых активов.
Что такое HARD Protocol (HARD)?
HARD Protocol (HARD) - это собственная криптовалюта протокола HARD. Все токены HARD, распространяемые в качестве вознаграждения, заблокированы смарт-контрактом. Пользователи, которые запрашивают ЖЕСТКИЕ токены с более длительными программами предоставления прав, получают больше токенов. Точные варианты использования токенов подлежат голосованию руководства.
Токен HARD является токеном местного правительства платформы и имеет следующие варианты использования:
- Награды за майнинг ликвидности: токены HARD распределяются в качестве вознаграждения пользователям, которые вносят и / или занимают поддерживаемые активы.
- Голосование руководства: держатели HARD токенов могут участвовать в голосовании по управлению платформой и получать награды.
В дополнение к этому, в работе Hard Protocol есть три основных направления:
- Предложение: вы можете безопасно приобретать свои цифровые активы на HARD и получать проценты.
- Ссуда: вы можете использовать свои цифровые активы в качестве обеспечения для получения различных активов.
- Прибыль: поставщики и заемщики могут заработать HARD, токен управления приложением.
HARD Protocol Version 1 поставляется с поддержкой депозитов на стороне предложения и HARD-стимулами для BTC, XRP, BNB, BUSD, USDX. Версия 2 включает в себя функции заимствования и стимулы заимствования для этих активов, а также расширенную функциональность HARD-управления в цепочке.
Основная роль токена HARD - дать своим держателям право голоса на платформе. В совокупности держатели HARD несут ответственность за управление ключевыми параметрами протокола, такими как то, какие активы будут предлагаться, как вознаграждения будут распределяться между активами и любые установленные комиссии платформы.
Токены HARD также будут использоваться для поощрения ранних участников и дадут им право голоса в процессе разработки и управления приложением.
Обзор HARD Coin
HARD Coin появляется как токен, который привлекает внимание и выделяется после объявления Binance Launchpool. Однако, глядя на графики HARD coin, видно, что у инвесторов совершенно разные взгляды. Потому что график HARD довольно изменчив.
Может быть полезно взглянуть на текущие и исторические данные протокола HARD, чтобы лучше проанализировать подходы инвесторов.
С другой стороны, следует отметить, что HARD Coin, которая достигла дна с $ 0,3810 14 ноября 2020 года, побила рекорд с $ 1,20 8 декабря 2020 года.
Как купить HARD Protocol Coin?
HARD Protocol Coin можно быстро и легко приобрести через Binance , крупнейшую в мире биржу криптовалют с точки зрения объема транзакций .
Читайте также: