77+ примеров использования смарт-контрактов

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

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

Чтобы преодолеть отсутствие такого связующего звена, гибридные смарт-контракты используют оракулы в качестве посредника для сбора информации из внешних источников данных, предоставления информации во внешние источники, и для вычислений off-chain. Оракулы обеспечивают не только двустороннюю связь между смарт-контрактами и внешним миром,  но и безопасную среду, которая защищает от любого риска единой точки отказа (single point of failure), например, от манипуляции данных или системного сбоя.

рис.1: Chainlink связывает смарт-контракты с off-chain данными и событиями
рис.1: Chainlink связывает смарт-контракты с off-chain данными и событиями

Chainlink — самая широко используемая сеть децентрализованных оракулов. В настоящий момент Chainlink обслуживает эквивалент десятков миллиардов долларов на многочисленных блокчейнах. Chainlink — это экосистема, состоящая из множества децентрализованных сетей оракулов, работающих одновременно. Каждая сеть оракулов обеспечивает множество сервисов, не зависящих от других сетей оракулов, включая следующие примеры:

  • Децентрализованные ценовые потоки (Decentralized Price Feeds) могут быть интегрированы в любом приложении DeFi как источник высококачественной и защищенной информации с финансовых рынков по полному набору финансовых активов.

  • Проверяемая случайная функция (VRF/Verifiable Random Function) предоставляет NFT проектам и игровым приложениям доказуемо достоверный и корректный генератор случайных чисел (RNG/Random Number Generator), специально созданный для приложений использующих смарт-контракты.

  • Доказательство наличия резерва (Proof of Reserve) позволяет смарт-контрактам аудировать реальную коллатерализацию любого актива on-chain, который обеспечен резервами off-chain, например стейблкоины, токенизированные активы, кросс-чейн токены, и т.д.

  • Хранители (Keepers) предоставляют разработчикам dApps надежный, децентрализованный, и выгодный сервис автоматизации транзакций для исполнения функций смарт-контрактов. Хранители также позволяют поддерживать работу смарт-контрактов, благодаря возможности вычислений off-chain.

  • Протокол межсетевой совместимости (CCIP/Cross-Chain Interoperability Protocol) — это открытый стандарт для многосетевой экосистемы, позволяющий межсетевым приложениям передавать данные и исполнять команды смарт-контрактов и токенов для всех блокчейнов.

  • Модульные Внешние Соединители (Modular External Adapters) — для подключения к любому оффчейн ресурсу, включая платных поставщиков данных, подтвержденные web API, сенсоры IoT (Интернет вещей), банковские платежи, корпоративные бэкэнды, блокчейны, и т.д.

  • Обработка данных оффчейн (Off-Chain Computation) — к примеру, Fair-Sequencing Services/FSS для упорядочивания транзакций, DECO для подтверждения данных сессий TLS с сохранением конфиденциальности, Arbitrum Rollups для масштабирования оффчейн вычислений в Solidity, и т.д.

рис.2 Chainlink - это гетерогенная сеть оракулов, состоящая из множества моделей оракулов
рис.2 Chainlink — это гетерогенная сеть оракулов, состоящая из множества моделей оракулов

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

Доступ к внешним данным открывает новые возможности для следующего поколения смарт-контрактов. Чтобы продемонстрировать бесконечный потенциал смарт контрактов, мы составили список из более 77 способов использования сети Chainlink.

DeFi — Децентрализованные Финансовые Сервисы

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

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

Денежные рынки

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

Aave, Compound, Rari Capital — некоторые из примеров того, как децентрализованные блокчейн протоколы используют котировки цен от Chainlink для сбора рыночной информации для десятков криптовалют. Имея возможность получать такую информацию в режиме реального времени, эти и другие протоколы могут оценивать обеспечение и кредит каждого пользователя и таким образом определять, в какой момент должны быть инициированы ликвидации позиций. Такие децентрализованные протоколы всегда сохраняют полное обеспечение по займам, и таким образов защищают активы своих пользователей.

рис.3 Aave использует Chainlink для гарантии полного обеспечения активов
рис.3 Aave использует Chainlink для гарантии полного обеспечения активов

Децентрализованные стейблкоины

Стейблкоины — это он-чейн токены, привязанные 1:1 к фиату, чаще всего к американскому доллару. Они дают возможность их пользователям сохранить стабильный капитал в неволатильной криптовалюте. В то время как централизованные стейблкоины обеспечены фиатом на стандартном банковском счете (оффчейн), децентрализованные стейблкоины чаще всего полностью обеспечены ончейн криптовалютами, и потому требуют ценовые потоки в режиме реального времени для поддержания полного обеспечения (например, когда обеспечение должно сохраняться на уровне 150% и более от стоимости кредита).

DeFiDollar — один из примеров децентрализованного «мета-стейблкоина» (или иными словами — стейблкоина, обеспеченного набором различных криптовалют), который использует ценовые потоки Chainlink для отслеживания стоимости базовых активов, включая sUSD, USDT, DAI, и USDC, в свою очередь обеспечивающих DeFiDollar. Если один или несколько базовых активов отклоняется от их привязки к доллару 1:1, и таким образом приводит DUSD к потере 1:1 привязки к доллару, инициируется ребалансировка между всеми базовыми активами для поддержания паритета DUSD.

рис.4 DeFiDollar использует котировки Chainlink для оценки стоимости базовых активов, обеспечивающих DUSD
рис.4 DeFiDollar использует котировки Chainlink для оценки стоимости базовых активов, обеспечивающих DUSD

Алгоритмические стейблкоины

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

Fei Protocol — один из примеров алгоритмического стейблкоина, который использует ценовые потоки Chainlink и устанавливает таким образом кривую привязки стоимости для пула ликвидности FEI/ETH на Uniswap для стабилизации привязки токена FEI. С помощью рыночной стоимости котировки ETH/USD, протокол Fei гарантирует корректный курс обмена для их алгоритма.

рис.5 Как Fei Protocol использует котировки Chainlink для стабилизации привязки их алгоритмического стейблкоина FEI
рис.5 Как Fei Protocol использует котировки Chainlink для стабилизации привязки их алгоритмического стейблкоина FEI

Фьючерсы

Фьючерсы — это финансовый инструмент, обязывающий трейдеров покупать или продавать  актив по предустановленной цене в определенный момент в будущем. Часто используемые для хеджирования и торговли с плечом, фьючерсные смарт-контракты требуют от своих пользователей обеспечение их позиций. Ценовые потоки используются для определения того, в какой момент должна произойти ликвидация, гарантируя таким образом полное обеспечение контракта на любом отрезке времени.

dYdX и MCDEX — примеры ончейн финансовых приложений, которые используют ценовые потоки Chainlink для бессрочных фьючерсных позиций. С помощью децентрализованных оракулов Chainlink, эти протоколы обеспечивают платежеспособность таких платформ, и доступ к информации о ценах в режиме реального времени, как для своевременного исполнения ликвидации, так и для динамического определения стоимости обеспечения и поддержки нейтрального риска.

рис.6 dYdX использует котировку LINK/USD для их бессрочного контракта ончейн
рис.6 dYdX использует котировку LINK/USD для их бессрочного контракта ончейн

Опционы

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

Opyn и Thales — примеры опционных протоколов, использующих ценовые потоки Chainlink для определения стоимости крипто активов, позволяя пользователям выпускать, торговать, и закрывать опционные контракты. Более того, такие Chainlink ноды, как, например, dxFeed, поставляют информацию о Подразумеваемой Волатильности (Implied Volatility) для различных крипто активов, позволяя таким образом создателям контрактов вычислять премиум для каждого контракта — с полной безопасностью, и гарантированной защитой от внешних факторов. 

рис.7 Opyn использует ценовые потоки Chainlink для произведения расчетов и закрытия опционных контрактов
рис.7 Opyn использует ценовые потоки Chainlink для произведения расчетов и закрытия опционных контрактов

Синтетические активы

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

Synthetix — один из примеров протоколов, использующих ценовые потоки Chainlink для создания всевозможных «синтов», позволяющих торговать такими активами, как криптовалюты, фиат, сырье, индексы, акции, и тд. Благодаря торговой модели P2C (Peer-to-Contract или пользователь — смарт-контракт), трейдеры могут обменивать синтетические токены с нулевым проскальзыванием, используя ценовые потоки Chainlink для доступа к текущей стоимости базовых активов.

рис.8 Synthetix использует ценовые потоки Chainlink как целевую привязку для многочисленных синтетических активов
рис.8 Synthetix использует ценовые потоки Chainlink как целевую привязку для многочисленных синтетических активов

Кредитные дефолтные свопы

Кредитные дефолтные свопы (CDS) — это финансовые соглашения, позволяющие кредиторам хеджирование против возможного риска дефолта (неплатежеспособности) заемщика. Если заемщик об’являет о своей неплатежеспособности, то сторона, которая выпустила CDS, возмещает кредитору стоимость долга, который должник не в состоянии выплатить.

Opium.Exchange — один из примеров ончейн протокола, который использует ценовые потоки Chainlink для произведения расчетов по таким финансовым инструментам. Одним из таких  продуктов является кредитный дефолтный своп централизованного стейблкоина USDT, позволяющий трейдерам хеджировать риск отклонения USDT в минус от его привязки к доллару 1:1.

Облигации/Бонды

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

Технологии Chainlink уже продемонстрировали такую возможность с POC with SWIFT, (Proof of Concept) где оракулы использовались для аггрегации процентных ставок от пяти крупнейших банков, собирали информацию о рейтингах задолженности от S&P, и генерировали процентную ставку в форме ISO20022 платежного сообщения SWIFT. Бонды — это мультитриллионная индустрия, и их перевод ончейн существенно сократит партнерские риски и понизит операционные расходы для индустрии в целом.

рис.9 Смарт контракт использует децентрализованные оракулы Chainlink и стандарт ISO20022 от SWIFT
рис.9 Смарт контракт использует децентрализованные оракулы Chainlink и стандарт ISO20022 от SWIFT

Токенизированное управление портфелем

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

Tokensets — один их таких протоколов, который использует ценовые потоки Chainlink для генерирования различных «сетов», и токенизирует позиции, которые исполняют сделки от имени их пользователей. Такие «сеты» основаны на техническом анализе всевозможных метрик, таких как RSI, скользящие средние и т.д., созданных специально для отслеживания основных трендов в движении цен. Более того, пользователи могут использовать свои токенизированные «сеты» как обеспечение внутри других протоколов, например AAVE, для повышение эффективности капиталовложений.

Доказательство резерва (Proof of Reserve) ончейн

Обернутые (wrapped) межсетевые активы — это криптовалюты/токены, нативные для одного блокчейна, которые «запакованы» в смарт-контракт и далее могут быть «распакованы» на другом блокчейне — набирают популярность благодаря их способности увеличить различные типы обеспечения, доступные внутри всей экосистемы DeFi. Однако, чтобы обеспечить добросовестность DeFi приложений, поддерживающих обернутые токены в качестве депозитов, референсные контракты Proof of Reserve могут быть использованы для предоставления информации о реальном обеспечении ончейн активов.

WBTC от BitGo и renBTC от протокола Ren — примеры протоколов, использующих Chainlink для обеспечения референсных котировок Proof of Reserve, и представляют собой подавляющее большинство обернутого биткоина на Ethereum, и как следствие — ликвидность эквивалентную миллиардам долларов. Такие референсные котировки Proof of Reserve обеспечивают DeFi протоколы данными, которые им требуются для автономной верификации резервов, и быстрой и эффективной защиты средств их пользователей в случае дефицита обеспечения. Референсные котировки Proof of Reserve могут также быть использованы  для отслеживания уровня обеспечения активов далеко за пределами межсетевых (кросс-чейн) токенов, включая стейблкоины, сырьевые ресурсы реального мира, таким образом увеличивая способы обеспечения внутри DeFi.

рис. 10 Схема Proof of Reserve от Chainlink обеспечивает смарт-контракты доказательством обеспечения WBTC от BitGo
рис. 10 Схема Proof of Reserve от Chainlink обеспечивает смарт-контракты доказательством обеспечения WBTC от BitGo

Доказательство резерва (Proof of Reserve) оффчейн

Перенос активов из реального мира в блокчейн представляет собой огромный потенциал для расширения экономической активности в DeFi, схожий с тем, который мы видели при появлении стейблкоинов, обеспеченных фиатом другими активами. Однако, это требует централизованное хранение обеспечения, отделяя таким образом токенизированную репрезентацию ончейн от собственно оффчейн актива. Благодаря технологии Proof of Reserve, разработанной Chainlink, смарт-контракты осуществляют автономный аудит коллатерализации токенов, обеспеченных активами из реального мира, таким образом защищая своих пользователей в моменты непредвиденных инцидентов, навроде черного лебедя.

Примеры таких протоколов — PAX и PAXG токены от Paxos Proof of Reserve, а также TUSD токен от TrustToken Proof of Reserve. Последний обеспечивает приложения DeFi данными о реальном количестве американского доллара, обеспечивающего стейблкоин TUSD, который находится на целевом депозитном банковском счете, оффчейн, и отслеживается Armanino — американской аудиторской группой из топ-25 в США. Такие данные могут быть сверены с общей доступной циркуляцией TUSD на любом блокчейне, в соответствии с данными, предоставленными схемой Proof of Supply для TUSD — для подтверждения реального обеспечения токенизированного доллара TUSD от TrustToken.

Автоматизированное управление активами

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

Visor Finance является одним из примеров таких протоколов. Они используют технологию Chainlink Keepers — децентрализованный сервис автоматизации транзакций — для перебалансировки ликвидности позиций на Uniswap V3 (V3 — третья версия), когда происходит переход предустановленных пороговых значений. Новый и уже существующий капитал стратегически перераспределяется между активными ликвидными позициями и отдельными лимитными ордерами, позволяя протоколу поддерживать наивысшую утилизацию каждого актива.

Распределение прибыли

Все больше протоколов DeFi запускаются в форме ДАО (Децентрализованные Автономные Организации), и растет необходимость для разработчиков и комьюнити в распределении прибыли, заработанной протоколом, — децентрализованно и в режиме реального времени. Используя оракулы Chainlink, ДАО могут распределять крипто доходы в пропорциональном соответствии к заданным метрикам, таким как количество монет в стейкинге, участие в управлении ДАО, активность разработчиков, или любые другие предустановленные условия.

Synthetix — один их примеров DeFi протоколов, использующих технологию Chainlink Keepers для автоматизации распределения оплаты биржевых комиссий и вознаграждений за стейкинг, еженедельно, для всех своих пользователей. Chainlink Keepers отслеживает состояние смарт-контрактов оффчейн и автономно генерирует функцию распределения оплаты биржевых комиссий в соответствующем смарт-контракте ончейн.

рис. 11 Synthetix использует технологию Chainlink Keepers для автоматического распределения биржевой комиссии и вознаграждений за стейкинг для своих пользователей
рис. 11 Synthetix использует технологию Chainlink Keepers для автоматического распределения биржевой комиссии и вознаграждений за стейкинг для своих пользователей

Фарминг

Фарминг — это новый финансовый продукт в экосистеме DeFi, используемый для удержания ликвидности и поддержки справедливого распределения токенов для управления протоколом между его пользователями. В большинстве децентрализованных приложений (дАппов), предлагающих фарминг, поставщики ликвидности получают вознаграждение в форме нативных токенов, которые субсидируют развитие протокола.

Plasm и StrongBlock — примеры протоколов, использующих оракулы Chainlink для своих механизмов фарминга. Plasm использует ценовые потоки Chainlink для вычисления объема ликвидности, которые пользователи вложили в протокол, и для распределения соразмерных вознаграждений. StrongBlock ежесуточно вычисляет долларовый эквивалент активов в пулах ликвидности.

рис. 12 StrongBlock использует оракулы Chainlink для вычисления вознаграждений за стейкинг, основанных на надежности их майнеров
рис. 12 StrongBlock использует оракулы Chainlink для вычисления вознаграждений за стейкинг, основанных на надежности их майнеров

Кредитный Фарминг

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

Alpaca Finance — один из примеров протоколов, использующих ценовые потоки от Chainlink, для предоставления своим пользователям возможности мобилизировать их открытые позиции на PancakeSwap и WaultSwap с помощью займа капитала. Информация с финансовых рынков, доступная в ценовых потоках  Chainlink, используется для вычисления корректоного обеспечения во время выпуска займа, а также для ликвидации позиций для защиты платежеспособности протокола.

рис. 13 Alpaca Finance использует ценовые потоки Chainlink в момент предоставления займа и ликвидаций
рис. 13 Alpaca Finance использует ценовые потоки Chainlink в момент предоставления займа и ликвидаций

Кросс-чейн Фарминг

Экосистема DeFi продолжает распространяться среди многочисленных блокчейн сетей, и возможность генерировать доход с помощью уже существующих протоколов, таких как Aave, разделяется между несовместимыми экосистемами. Для преодоления этой проблемы требуется межсетевой токен/мост для перевода токенов между различными блокчейнами. Однако, существующие кросс-чейн решения могут быть подвержены кибератакам, и уже есть прецеденты, когда сотни миллионов долларов были украдены из нескольких протоколов. CCIP, протокол межсетевой совместимости (Cross-Chain Interoperability Protocol), представляет собой защищенный открытый стандарт для передачи сообщений и токенов между различными блокчейнами, разрешает вышеупомянутые проблемы, и обеспечивает разработчиков защищенной инфраструктурой, необходимой для создания мультисетевых фарминговых платформ.

Самовыплачиваемые займы

Самовыплачиваемые займы — новый финансовый продукт, который стал возможен благодаря экосистеме DeFi. Протоколы, предлагающие самовыплачиваемые займы, позволяют своим пользователям добавлять их активы в качестве обеспечения, и брать займ/выпускать синтетические активы для оборотного капитала. Залоговое обеспечение тем временем направляется в фарминговые протоколы, и полученный доход используется для автоматической выплаты займа. Таким образом, появляется высокоэффективный долговой инструмент.

Alchemix — один из таких протоколов. Alchemix использует ценовые потоки Chainlink, а также технологию Chainlink Keepers, и обеспечивает своих пользователей заемами в счет будущей прибыли, обеспеченной депозитами в DAI и ETH. Протокол использует ценовые потоки для выпуска займов по точной рыночной стоимости, а также поддерживает последовательно точный коэффициент обеспечения займа. Технология Chainlink Keepers инициирует функции виртуального сейфа, включая «сейф для сбора урожая» (vault harvesting) и «сейф для слива» (vault flushing), автоматизируя таким образом выплату займа и перераспределение новых поступлений в Yearn Finance для последующего фарминга.

рис. 15 Alchemix использует ценовые потоки Chainlink для реализации функции самовыплачиваемых займов
рис. 15 Alchemix использует ценовые потоки Chainlink для реализации функции самовыплачиваемых займов

Автоматический отключатель

В условиях экстремальной волатильности, информация о цене активов на одной криптовалютной бирже может существенно отличаться от из реальной стоимости на рынке в целом. Это может привести к потере средств пользователей в пользу арбитражеров, или ошибочные ликвидации открытых позиций с кредитным плечом. Чтобы этого избежать, криптовалютные биржи могут использовать функцию автоматического выключателя (circuit breaker), который активируется в случае экстремальных отклонений.

Digitex — один из примеров традиционной биржи, которая защищает своих пользователей от рыночных манипуляций, посредством автоматического мониторинга экстремальных отклонений между внутренними котировками Digitex и ценовым потоками Chainlink, обеспечивая таким образом дополнительный уровень безопасности. Если цены на бирже Digitex отклоняются больше установленного предела от цен на общем рынке, которые предоставляют децентрализованные сети оракулов Chainlink, инициируется «Автоматический Выключатель», и все торги и ликвидации временно приостанавливаются.

Децентрализованная биржа

Децентрализованные биржи (DEXs — Decentralised Exchanges) — это торговые площадки на блокчейне, позволяющие своим пользователям торговать криптовалютой без необходимости доверительного хранения  у централизованных организаций (банков, централизованных бирж, брокеров и т.д.). Популярность децентрализованных бирж постоянно растет, и вместе с этим растет важность как традиционных трейдинговых функций, так и функционала для профессиональных участников рынка, пока что доступного только на централизованных биржах.

Релейер Bamboo Relay — один из примеров децентрализованной биржи. Они используют ценовые потоки Chainlink для функционала стоп-лосс. С помощью агрерированной рыночной информации, стоп-лосс ордера исполняются только когда совокупная рыночная цена актива переcекает предустановленный порог, что в свою очередь предотвращает кибератаки, связанные с манипуляцией рынком, например, создание и исполнение фейковых ордеров.

рис. 16 Bamboo Relay использует ценовые потоки Chainlink для функционала стоп-лосс в протоколе 0x protocol
рис. 16 Bamboo Relay использует ценовые потоки Chainlink для функционала стоп-лосс в протоколе 0x protocol

Автоматизированные маркет мейкеры

Автоматизированные маркет мейкеры (AMM) — самый популярный вид децентрализованных бирж. Вместо традиционных книг ордеров, авто маркет мейкеры представляют собой пулы ликвидности он-чейн, обеспечивающие обмен крипто активами по предустановленной формуле. Объединяя капитал в такие пулы, поставщики ликвидности зарабатывают пассивный доход, а трейдеры получают доступ к ликвидности.

DODO — один из AMM протоколов, использующий ценовые потоки Chainlink для нового дизайна AMM — Проактивный Маркет Мейкер (PMM). РММ имитирует и упреждает поведение маркет мейкеров, собирает капитал около рыночной цены, информация о которой поступает из ценовых потоков Chainlink, и таким образом содействует осуществлению более эффективных и высокочастотных трейдинговых стратегий.

Стейкинг

Большинство протоколов полагаются на ту или иную форму стейкинга — предоставление криптовалюты  в качестве залога в смарт-контракте — для обеспечения успешной токен экономики (токеномики) сети. Таким образом, мы видим как и куда должны быть распределены награды за стейкинг, в какой пропорции, или же они должны быть урезаны («slashed») — автоматически изъяты при определенных обстоятельствах, таких как штраф за недобросовестное поведение участников протокола.

К примеру, AdEx требует от своих валидаторов предоставлять токены в качестве залога и поддерживать регулярную поддержку сети. AdEx использует оракулы Chainlink для мониторинга аптайм (времени безотказной работы), и если какая-либо нода не отвечает требованиям аптайм, инициируется slashing — или иными словами стейк этого валидатора теряет определенную долю — штрафуется. Такой подход гарантирует, что сеть поддерживают только высококачественные операторы нод, что в свою очередь улучшает безопасность всей платформы.

Перебалансировка

Смещение (rebasing) — это новый финансовый инструмент в DeFi, поддерживающий обеспечение того или иного токена и его привязку к определенному активу, например доллару. В случае, когда цена токена превышает стоимость актива во время смещения, протокол выпускает дополнительные токены в обращение и распределяет их пропорционально для всех держателей с целью снижения цены и уравнивания привязки к базовому активу. При противоположном сценарии, когда цена токена ниже цены базового актива, необходимая доля токенов сгорает, таким образом повышая его цену и перебалансируя привязку к активу.

Ampleforth — один из таких протоколов, использующий ценовые потоки Chainlink для перебалансировки их токена. Общий объем токена AMPL в обращении ежедневно перебалансируется для поддержания привязки к потребительскому индексу CPI (Consumer Price Index) — индексу текущей оценки американского доллара с поправкой на инфляцию от 2019 года, от Бюро Экономического Анализа США. Оракулы Chainlink поставляют протоколу AMPL данные о средневзвешенной цене токена AMPL и о потребительском индексе CPI.

рис. 17 - Ampleforth использует оракулы Chainlink для перебалансировки токена AMPL каждые 24 часа
рис. 17 — Ampleforth использует оракулы Chainlink для перебалансировки токена AMPL каждые 24 часа

Активы реального мира

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

Ликвидации

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

Aave — один из примеров кредитных протоколов, который будет использовать технологию Chainlink Keepers для автоматизации ликвидаций. Chainlink Keepers отслеживает обеспечение необходимого коэффициента обеспечения открытых позиций, и если какая-либо позиция пересекает предустановленный предел обеспечения (например, 150%), тогда технология Chainlink Keepers инициирует функцию ликвидации и закрывает позицию, независимо от волатильности рынка или загруженности сети.

Рис. 18 - Aave будет использовать технологию Chainlink Keepers для автоматизации ликвидации необеспеченных позиций
Рис. 18 — Aave будет использовать технологию Chainlink Keepers для автоматизации ликвидации необеспеченных позиций


ссылка на оригинал статьи https://habr.com/ru/post/680120/

Основы безопасности 3CX. Часть 2

Здравствуйте!
Это вторая статья о безопасности 3CX. Как обещали, в ней мы поговорим о лучших практиках обеспечения безопасности 3CX. Начнем без предисловий, пройдясь по основным разделам интерфейса, на которые нужно обратить внимание.

Включите глобальный черный список IP-адресов

Глобальный черный список IP-адресов 3CX — важная функция безопасности, которая по умолчанию включена после установки 3CX. Она позволяет автоматически блокировать IP-адреса, подозреваемых в разнообразных атаках. Системы, в которых эта функция отключена, сразу попадают в зону риска. Если черный список не работает, в журнале событий АТС будут появляться попытки неуспешной регистрации от поддельных SIP user-agent — Polycom VVX, Asterisk, Avaya и т.д. Это свидетельствует о большом количестве ботов-сканеров, пытающихся пробить АТС брутфорс-атакой (получить SIP регистрацию вместо легального пользователя). Атаки обычно идут из-за VPN, от скомпрометированного сервера или SIP-устройства. Однако они могут идти и от вполне легального сервера, который неверно настроен (в этом случае он становится открытым ретранслятором SIP запросов — хакеры отправляют вам запросы REGISTER от имени чужих серверов).

Ограничьте доступ к портам

Если вы держите даже некоторые порты АТС открытыми для всего мира – ожидайте неприятностей. Например, порт SIP 5060 (UDP/TCP) должен быть открыт только для нескольких доверенных IP-адресов. Обычно это адреса ваших удаленных офисов и подключенных SIP-операторов. Перечислим типичные ошибки конфигурации.

Доступ к интерфейсу IP-телефона «из мира»

Иногда возникает ситуация, когда веб-интерфейс телефона или шлюза свободно доступен через Интернет. Часто сам администратор открывает HTTP/HTTPS порты на WAN-интерфейсе роутера для удаленной настройки устройств. Никогда не делайте этого! Открытые порты влекут ряд серьезных рисков:

  • Прошивка вендора может иметь уязвимости, а обновления не делаются или не делаются вовремя

  • На оборудовании оставлен пароль вендора по умолчанию

  • Возможна уязвимость нулевого дня, когда она обнаруживается на популярном устройстве и тут же используется хакерами

  • Поиск уязвимых устройств делается с помощью специализированных систем, таких как Shodan.

Все ваше VoIP-оборудование должно располагаться за NAT и не быть доступным из внешнего мира. Если вам необходим удаленный доступ, установите на один из внутренних компьютеров ПО удаленного администрирования и подключайтесь к устройствам через него.

Доступ к порту SSH

Когда вы открываете стандартный порт SSH (TCP 22) для управления Linux — он будет целью постоянных брутфорс-атак. Вы увидите, как растет Syslog-файл auth.log (записи о попытках входа с различных IP-адресов).

Совмещение различных сервисов

Если на вашем сервере 3CX работают еще какие-то приложения, это увеличивает уязвимость системы в целом. Например, дополнительные веб-сервисы являются потенциальной мишенью для атак. Общее правило – закрывайте все порты, которые только возможно, оставляя для работы 3CX только критически необходимые. Это делается правильной настройкой вашего сетевого экрана.

Защитите резервные копии паролем

Мы сталкивались со случаями взлома систем через украденный файл бэкапа. Поэтому рекомендуем использовать шифрование резервных копии на всех ваших системах, причем с разными паролями. Также не стоит использовать единое хранилище для всех резервных копий — если оно будет скомпрометировано, злоумышленники получат доступ сразу ко всем вашим системам. Также хранилище может выйти из строя – и это будет единая точка сбоя.

Ограничьте доступ к интерфейсу управления

Установите, с каких адресов администратор в принципе может управлять 3CX. Подключение с другого IP, даже с правильными учетными данными, будет отклоняться. 

Включите уведомления на e-mail

В 3CX предусмотрены различные e-mail уведомления для мониторинга АТС в реальном времени. Они позволяют оперативно получать информацию о подозрительных событиях, связанных со звонками и безопасностью. Рекомендуем включить эти уведомления и указать несколько e-mail адресов администраторов через запятую. Настройки уведомлений находятся в разделе «Параметры» > «Почта».  В таблице ниже описаны события, при возникновении которых система отправляет уведомления.

НАЗВАНИЕ СОБЫТИЯ В E-MAIL

ОПИСАНИЕ СОБЫТИЯ

Аварийное переключение транка, либо достигнуто максимальное количество вызовов через транк

Реальное число вызовов превысило параметр, указанный в поле транка «Количество одновременных вызовов»

Транк / провайдер ответил за запрос кодом ошибки

Вызов отклонен, например, оператором связи

Достигнуто предельное количество одновременных вызовов для данной лицензии

Пользователи делают слишком много одновременных вызовов

IP адрес попал в черный список и заблокирован

IP-адрес заблокирован сервером АТС из-за постоянных попыток регистрации с неверными учетными данными

Запросы отклоняются/блокируются модулем Антихакинга из-за обнаружения проблем с безопасностью

IP-адрес был заблокирован после отправки слишком большого количества запросов (флуд/DoS)

Вызов в запрещенную страну

Пользователь пытался набрать международный номер с префиксом неразрешенной страны

Просматривайте журнал аудита

В 3CX v18 появился журнал аудита. Если его включить, администратор сможет отслеживать любые изменения, сделанные в интерфейсе управления АТС (другим администратором или пользователем с соответствующими правами). Каждое событие в журнале содержит метку времени, имя пользователя, IP-адрес пользователя и протокол сделанного изменения (параметры до и после). Журнал аудита включается на странице Главная. Периодически просматривайте его на предмет необычных изменений. Содержимое также можно экспортировать в CSV формат.

Защита на стороне вашего оператора

Кроме настроек на стороне 3CX, VoIP-операторы также предоставляют клиентам дополнительные средства обеспечения безопасности. Зайдите в свой аккаунт у оператора и поищите такие параметры:

  • Ограничения вызовов по странам — установите аналогично настройкам 3CX

  • Предельное число одновременных вызовов через оператора

  • Лимит средств и запрет автоматического пополнения баланса

  • Уведомление на e-mail и автоматическое блокирование аккаунта при появлении подозрительных вызовов

Резюме

Наши советы могут показаться банальными. Строго говоря, они ничего не стоят, если их просто прочитать. Но вот если потратить полчаса времени и пройтись по настройкам, о которых мы говорили, вы, потенциально, избежите огромной нервотрепки и подтвердите свою репутацию профессионала!


ссылка на оригинал статьи https://habr.com/ru/company/3cx/blog/680126/

DALL·E 2 — мои первые эксперименты с возможностями нейросети

Еще в прошлом году я в свое время подавался в лист ожидания для того чтобы опробовать нейросеть GPT3 для генерации текстов, и спустя достаточно длительное ожидание она попала ко мне в руки, и даже в рабочем проекте мы с ней поэкспериментировали.

И когда Open AI открыли возможность получить доступ к их новой нейросети DALL·E 2 я конечно же воспользовался возможностью и вот на прошлой неделе и она попала мне в руки.

Сразу предупреждаю — в статье я не буду погружаться в технические детали, а просто покажу результаты тестов, причем без выбора самых лучших вариантов, а только то что получил в первых результатах


Введение — а что это за DALL·E 2 такая?

Немного про саму нейросеть DALL·E 2 — она создана для генерации изображений на основе пользовательского описания.

https://openai.com/dall-e-2/ — на сайте проекта достаточно подробно и с примерами показывается что эта штука уже может, но я добавлю пару примеров в статью, чтобы у вас как у читателя сразу был некоторый контекст.

Астронавт отдыхающий в тропическом отеле в космосе в фотореалистичном стиле
Астронавт отдыхающий в тропическом отеле в космосе в фотореалистичном стиле
Тарелка супа которая является порталом в другое измерение как «digital art» («цифровое искусство»)
Тарелка супа которая является порталом в другое измерение как «digital art» («цифровое искусство»)
Астронавт верхом на лошади как карандашный рисунок
Астронавт верхом на лошади как карандашный рисунок

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

Пример создания вариантов из исходного изображения
Пример создания вариантов из исходного изображения
Пример модификации изображения — нейросеть попросили дорисовать диван
Пример модификации изображения — нейросеть попросили дорисовать диван

Итак, после того как все мы поняли что же эта штука умеет, настало время проверить это на практике.

Тесты нейросети

Этот вариант генерации вышел несколько абстрактным, но в целом неплохо

Unreal engine 5 space station background inspired with space games and films
Unreal engine 5 space station background inspired with space games and films

Viewst team (developers, designers, managers and so on) making coding and sales of they wysiwyg software what helps create animated banners in Leonardo da Vinci styles

Как видно получается неплохо, задумка похожа на стоковые фотографии о командах которые делают свои дизайнерско\разработческие и прочие дела, но вот качество лиц конечно подкачало на «фотореалистичных вариантах»

Теперь перейдем к другим стилям

Realistic oil painting of Doggy in medieval armor with viewst chameleon logo on shield fighting with dragon of low sales

(Реалистичная масляная живопись изображающую Догги в средневековой броне с Viewst логотипом хамелеоном на щите сражающейся с драконом низких цен)

А вот это уже весьма круто выглядит и более чем соответствует запросу — не считая отсутствия дракона низких цен 🙂

Photo of cosplayers with costumes from games, films, anime before they go on stage to show whey work and performance

(Фото косплееров с костюмами по играм, фильмам и аниме перед тем как они выйдут на сцену показать свою работу и выступление)

Опять мы видим проблему с лицами людей (и любовь по всей видимости к аниме у нейросети 🙂 )

А теперь попробуем поменять стиль для такого запроса

Digital art of cosplayers with costumes from games, films, anime before they go on stage to show whey work and performance

И для картинки с девушкой с фиолетовыми волосами я решил посмотреть как сработает функция создания вариантов — и получилось более чем достойно

Pixel art of cosplayers with costumes from games, films, anime before they go on stage to show whey work and performance

И пиксель арт получается достаточно интересный

А теперь пришло время пейзажей. Как вариант я решил посмотреть что же может сделать нейросеть касательно моего родного города Рыбинска, и насколько это будет похоже на открыточные виды.

An impressionist watercolor painting of Rybinsk with view from water on bridge, museum and church at summer time

Этим результатом я был очень впечатлен, так как на многих фотографиях обычно как раз фигурирует собор, здание музея с красной крышей и мостом через волгу

И для примера фотография

Затем для того же запроса я попросил сделать еще вариантов, и вот что получилось

А затем я решил посмотреть на варианты пейзажей с осенью вместо лета и сменить стиль с акварели на масло

An impressionist oil painting painting of Rybinsk with view from water on bridge, museum and church at autumn time

Затем я решил попробовать режим работы с созданием вариантов по готовому изображению.

Я взял картинку медведя-пивовара из моего туристического пэт-проекта, и запросил нейросеть создать другие варианты эскиза. И получилось на удивление не плохо

Затем я опробовал вариант дорисовки\перерисовки изображения — взял картинку медведя, и запросил Bear in engineering helmet and blueprints in hands и разметив область головы и рук (вместо секиры)

Далее я решил посмотреть, что будет если разметить все изображение как возможное место для перерисовки с запросом Bear in watercolor type with Rybinsk museum background

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

И еще раз попробовал варианты, в этот раз вышло более коряво для медведя с секирой

Продолжим пробы с вариантами — тут я использовал свою фотографию с фестиваля в косплее на Иванушку из Морозко

Еще варианты косплейной фотографии, на этот раз с моим Айзеком из Dead Space 2

И еще немного перерисовки фотографии с запросом Phot if Russian summer forest (да, я опечатался)

А теперь продолжим с безумными запросами, часть из которых мне подсказали)

Wrestler in ball gown (рестлер в бальном платье)

Wrestler in ball gown from renesanse time in style of Yan van Eyk

DND dwarf monk character who likes cats and use as iron apples to fight for balance in a world (ДНД персонаж гном монах который любит котов и использует железные яблоки для того чтобы бороться за баланс в мире)

DND dwarf monk character who likes cats and use as iron apples to fight for balance in a world in unreal engine 5 style

И вот что будет если мы чуток поменяем запрос и попросим стиль Unreal Engine 5

Warhammer elf mage character riding a white Chinese dragon in unreal engine 5 style (Warhammer персонаж маг-эльф верхом на белом китайском драконе в стиле Unreal Engine 5)

Продолжим фэнтези тематику

Warhammer elf mage character riding a white Chinese dragon (Warhammer персонаж маг-эльф верхом на белом китайском драконе)

“Warhammer elf mage character riding a white Chinese dragon” by Yan van Eyk

Проба работы с вариантами логотипа

Medieval cockatiel tapestry

И еще один подсказанный запрос который вышел просто потрясающе

Продолжаем тему

Medieval cockatiel tapestry as wallpapers in modern house

И вариант с попугаями выше в виде обоев

Красивый лес в стиле Шишкина с гигантскими мухоморами и охотниками за шишками

А теперь проверим как нейронка «понимает» другие языки, в частности русский — как мы видим в целом про лес и шишки и мухоморы понято, но уже не так хорошо.

Photorealistic 3d render of donut with blue glaze and small yellow hearts and pearls on glaze in purple room

Продолжим с вариантами генерации изображений. Данный запрос я составил, чтобы посмотреть получится ли что-то похожее на работу в 3d от @Troxx_cosplay

И вот что получилось

Oil painting of landscape with road going through field surrounded by forest. Road goes to giant grey concrete building, with few small windows on top. All landscape is foggy

Продолжаем тему пейзажей

Еще немного работы с вариантами картинки

Young woman not tall with short blue hair and many earrings with feathers and stones in light jacket, brown shirts, high socks and army shoes in watercolor style

Кокадутиэль

И тут отлично выглядящие пейзажи

“Front end and backend developers arguing to create ultimate developer”by Leonardo da Vinci

Front end and backend developers arguing to create ultimate developer in medival style

Disco elisium detective fighting his destiny in medival style


Что же можно сказать по итогу (после того как я потратил все доступные бесплатные лимиты).

Это уже очень интересный инструмент для тех же идей с референсами для художников, иногда (особенно с пейзажами) чуть ли не готовый инструмент чтобы сделать картину и повесить ее на стену, штука чтобы сделать себе иллюстрации для твоей статьи (как это к примеру часто сейчас делает Denis Sexy IT) а иногда генератор очень странных лиц и ситуаций.

Так что нас ждет очень интересное будущее 🙂


ссылка на оригинал статьи https://habr.com/ru/post/680136/

Как добавить в датасет Microsoft COCO свои классы и обучить модель YOLOX

В интернете достаточно статей на тему «как обучить custom dataset на yolo».
Что скрывается за этими словами?
Ничего сверхестественного. Собираем или находим где-нибудь датасет, размечаем его, создаем файл аннотаций к картинкам. Далее берем одну из предобученных моделей yolo, обучаем эту модель на собственном датасете и далее наслаждаемся результатом.
Есть конечно, свои нюансы от yolo к yolo (которые уже определяются семействами в своих версиях, например, той же yolov5 порядка десяти вариантов моделей), но, в целом, порядок действий такой.
Все так. Однако модель, обученная на собственном датасете, будет определять только те классы, которые в нее заложили. Например, только дым и огонь.

При этом известно, что в датасете, на котором она обучалась, например Microsoft COCO в ситуации с YOLOX, «остались» еще 80 классов, которые также хотелось бы использовать в своих целях определения объектов на изображении.
Кроме того, попутно возникает вопрос: как убрать лишние классы из датасета Microsoft COCO? Потому как, определять на изображении автобусы и людей и одновременно тарелки и ножи, не каждому нужно.

Поэтому структура работы предлагается следующей:
1. Возьмем какой-нибудь уже размеченный custom датасет. Для усложнения задачи, пусть он будет в другом формате (например Pascal VOC — формат данных, используемых в YOLOv5), конвертируем его в формат COCO (формат данных для целей модели yolox).
2. Скачаем Microsoft COCO и «почистим» его от ненужных классов.
3. «Склеим» свой датасет с Microsoft COCO.
4. Обучим модель yolox на вновь созданном наборе данных и проверим как работает модель.

Свой собственный датасет.

Существует несколько вариантов:
— собрать свой собственный датасет;
— найти готовый.
Для первого варианта хотелось бы посоветовать opensource (почти) платформу roboflow.

Автор не имеет к ее разработке никакого отношения, но хотелось бы поблагодарить ее создателей, так как работать с ней крайне удобно: загружаешь данные (картинки с аннотациями или просто картинки), система может сама наглядно показать где ошибки в аннотациях или пропуски, разбить данные на выборки (train, val, test), произвести аугментацию во всех ее ипостасях, обучить модель на месте, выгрузить данные в удобном формате coco,pascal и т.д.

Есть и минусы: если денежку за пользование не платите, то действует ограничение на размер датасета в 10тыс. картинок и то, что ваш датасет становится «народным» достоянием и любой может его скачать с roboflow.

*Автор набросал небольшой парсер и снял срез из 10тыс. наименований датасетов с roboflow. Но, к сожалению, доброкачественных из них десятки — скачать.

На этом данный пункт, можно было бы и закончить: загрузили датасет в roboflow, по желанию выполнили аугментацию, конвертировали в coco формат, выгрузили.
Однако, как показала практика, нельзя просто взять и выгрузить датасет в coco через roboflow.
Несмотря на внешнее сходство, аннотации после выгрузки «не дружат» с форматом, который принимает yolox. Поэтому, желательно выгружать в формате pascal voc и далее использовать ручной способ конвертации:

Мы воспользуемся ранее созданным и размеченным датасетом, в котором будут двери и лестницы как классы. Именно эти два класса мы добавим к существующим классам Microsoft COCO, при этом, для примера, выбросив оттуда «ненужные» классы.

Датасет с дверями и лестницами в формате Pascal VOC можно скачать отсюда — датасет.

Формат, котором представлен датасет «достался» от yolov5.
В общих чертах данный формат данных (Pascal VOC) представляет из себя следующее:
— к каждой картинке прилагается отдельный xml файл, который ее описывает;
— существует также единый файл с расширением, который просто перечисляет те классы, которые используются. В нашем случае выглядит так:

doors_and_stairs_map.pbtxt

item {
id: 1
name: ‘door’
}

item {
id: 2
name: ‘Stairs’
}

Данные разделены на train/val/test выборки, к train и val есть папки с аннотациями. Всего порядка 10тыс. файлов (картинок) этого вполне достаточно, чтобы классы не перекрывались классами из датасета Microsoft COCO, представители которых также исчисляются тысячами.
Если взять слишком маленький датасет, то его представители не будут определяться моделью, возникнет дисбаланс классов.

Конвертируем из Pascal VOC в coco формат.

Для обучения yolox нужен формат данных coco. Это, как правило, два json файла c аннотациями (один для папки с картинками из train, второй — validation папки). По сути, все то, что содержится в xml файлах (к каждой картинке), которые используют yolov5 модели должно перекочевать в 2 json файла, которые использует yolox.

Этапы конвертации.

*Для датасета двери, лестницы все нижеперечисленные шаги уже выполнены.
1. После распаковки датасета с дверями и лестницами, в корне необходимо создать простой labels.txt c классами, которые используются в датасете. В нашем случае door и Stairs. При этом важно, чтобы сохранялся синтаксис названий классов и каждый класс — с новой строки.
2. Создать папки train2017, val2017,train_annotations, val_annotations. В которых будут аннотации и картинки отдельно друг от друга.
3. Создать два txt файла: train.txt и val.txt (для train и val папок), в которых в будут имена файлов в столбец без расширений:
cam_image1
cam_image1
cam_image1
cam_image10
Небольшой help-code для этого —

code

import os directory = 'doors/images/train' file_out='train.txt' for file in os.listdir(directory):     if file.lower().endswith(".jpg"):         with open(file_out, 'a') as f:             f.write(f'{file.split(".")[0]}\n')

4. Конвертировать в coco формат папки train и val:

python voc2coco.py --ann_dir doors-and-stairs-dataset/train_annotations --ann_ids doors-and-stairs-dataset/train.txt  --labels doors-and-stairs-dataset/labels.txt --output doors-and-stairs-dataset/coco_instances_train.json --ext xml

python voc2coco.py --ann_dir doors-and-stairs-dataset/val_annotations --ann_ids doors-and-stairs-dataset/val.txt  --labels doors-and-stairs-dataset/labels.txt --output doors-and-stairs-dataset/coco_instances_val.json --ext xml

Конвертер — voc2coco.py

В результате получаются два файла json (coco_instances_train.json, coco_instances_train.json), которые вместе c папками train и val (в которых картинки) понадобятся для дальнейшего обучения в составе классов Microsoft COCO. Папки с xml файлами больше не нужны.
Скачать готовые json — здесь.

2. Скачаем Microsoft COCO и «почистим» его от ненужных классов.

Датасет Microsoft COCO расположен по ссылке. Там же можно почитать о его структуре, ознакомиться с api. Нас интересует coco 2017, картинки с аннотациями.

Test выборку можно не скачивать, это просто картинки, на которых можно будет проверять уже готовую модель. Вместо картинок из test можно брать абсолютно любую картинку из интернета.
В аннотациях, которые являются json файлами нам понадобятся только instances_train2017.json и instances_val2017.json.
Заглянем в один из них, чтобы получить представление о структуре данных:

read_jsons.py

 import json from time import sleep  with open('instances_val2017.json') as json_file:     data = json.load(json_file)     for i in data['categories']:         print(i['name'])         #for i in data['annotations']:         #print(i)     #for i in data['images']:         #print(i) 

Таким нехитрым способом можно посмотреть категории (классы), аннотации к ним, описания картинок. Эти сведения понадобятся в дальнейшем, когда будем объединять классы.
А пока отфильтруем Microsoft COCO, выбросив ненужные классы.

Фильтруем Microsoft COCO

Чтобы отфильтровать классы нужно выполнить файл filter.py со следующими аргументами:

python filter.py --input_json /annotations/instances_train2017.json --output_json /annotations/filtered_train2017.json --categories person dog cat

При этом перечислить классы, которые оставить. Если класс состоит из двух слов, например wine glass, то его необходимо заключить в «». В примере выше мы оставляем только person, dog и cat классы. Но, чтобы не было путаницы, я исключу из coco меньше классов, сохранив следующие:

код

python filter.py --input_json instances_train2017.json --output_json train2017_filtered.json --categories car orange banana "wine glass" sandwich bottle vase bicycle fork sofa umbrella toothbrush keyboard book mouse cat bed cup spoon microwave "cell phone" "tv monitor" carrot "teddy bear" "sports ball" knife scissors laptop oven remote sink backpack bench dog "dining table" chair handbag bowl toilet "hair drier" refrigerator "potted plant" clock person suitcase apple 

*Не будут найдены классы sofa tv monitor, но это не страшно.

Этот же код необходимо выполнить и для instances_val2017.json:

код

python filter.py —input_json instances_val2017.json —output_json val2017_filtered.json —categories car orange banana «wine glass» sandwich bottle vase bicycle fork sofa umbrella toothbrush keyboard book mouse cat bed cup spoon microwave «cell phone» «tv monitor» carrot «teddy bear» «sports ball» knife scissors laptop oven remote sink backpack bench dog «dining table» chair handbag bowl toilet «hair drier» refrigerator «potted plant» clock person suitcase apple

Готово!
Проверим ранее использовавшимся read_jsons.py вновь созданные файлы (любой из них). Должно остаться 44 класса coco из 80.

3. «Склеим» свой датасет с Microsoft COCO.

Чтобы понять как происходит склейка, нужно заглянуть в файл аннотаций с помощью read_jsons.py

with open('filtered_val.json') as json_file:     data = json.load(json_file)     for i in data['categories']:         print(i) 

Код покажет, что категории идут по порядку:

 {'supercategory': 'person', 'id': 1, 'name': 'person'} {'supercategory': 'vehicle', 'id': 2, 'name': 'bicycle'} {'supercategory': 'vehicle', 'id': 3, 'name': 'car'} {'supercategory': 'outdoor', 'id': 4, 'name': 'bench'} 

А вот как выглядят категории в созданном json для custom dataset «Двери и лестницы»:

 {'supercategory': 'none', 'id': 1, 'name': 'door'} {'supercategory': 'none', 'id': 2, 'name': 'Stairs'} 

Следовательно, если просто склеить два json, то категории наложатся друг на друга, а с аннотациями и самими картинками будет путаница. Поэтому нужно сначала преобразовав json custom датасета «сдвинув» id классов.
Все было бы достаточно просто, если бы не одно «но», точно два «но».
Аннотации, id картинок в json файлах также подлежат изменению и вот краткая памятка:

 ##"categories":  #2 класса ##{'supercategory': 'none', 'id': 1, 'name': 'doors'} #заменить id 1 на id 45 ##{'supercategory': 'none', 'id': 2, 'name': 'Stairs'} #заменить id 1 на id 46  ##"annotations":  ##{'area': 38280, 'iscrowd': 0, 'bbox': [311, 29, 174, 220], 'category_id': 2, 'ignore': 0, \ #'segmentation': [], 'image_id': 2, 'id': 1}  #заменить category_id (см выше) и image_id (image_id*1000000)  #"images":  #{'file_name': 'cam_image2.jpg', 'height': 540, 'width': 960, 'id': 2} #заменить id (image_id*1000000)

К счастью, удалось написать скрипт, который сам все меняет, но необходимо вручную указывать множитель в строке image_id*1000000. Далее на примере будет понятнее.

Преобразование json custom датасета перед склейкой с Microsoft COCO.

Преобразуем файлы аннотаций custom датасета «Двери и лестницы»:

convert_jsons.py

 import json,os from time import sleep  #сдвиг по классам n=44 # 44- указать последний номер класса в датасете coco сейчас x1,x2,x3=100000,200000,1000000 #указать порядковые номера картинок  in_file='doors_stairs_train.json' out_file='doors_stairs_train_out.json'  in_file2='doors_stairs_val.json' out_file2='doors_stairs_val_out.json'  def transform(in_file,out_file):     with open(in_file) as json_file, open(out_file,'w') as out_file:     #with open('fromCOCO_cat_dog.json') as json_file:         data = json.load(json_file)         #меняем классы в "categories"         for i in data['categories']:                     i['id']+=n             #print(i['id'])         #for i in data['categories']:             #print(i)         #меняем классы и id в "annotations"         for i in data['annotations']:              i['category_id']+=n              i['image_id']+=x1 #1000000 взято с потолка, просто, чтобы номера не пересекались с номерами из COCO, где ~700000 картинок              i['id']+=x2 ##100000 взято с потолка, просто, чтобы номера не пересекались с номерами из COCO         #for i in data['annotations']:             #print(i)         #меняем id в "images"         for i in data['images']:              i['id']+=x3 #1000000 взято с потолка, просто, чтобы номера не пересекались с номерами из COCO, где ~700000 картинок         #for i in data['images']:             #print(i)         json.dump(data, out_file) transform(in_file,out_file) transform(in_file2,out_file2) os.remove(in_file) os.remove(in_file2) 

Здесь необходимо обратить внимание на вступительную часть:

n=44 # 44- указать последний номер класса в датасете coco сейчас x1,x2,x3=100000,200000,1000000 #указать порядковые номера картинок  in_file='doors_stairs_train.json' out_file='doors_stairs_train_out.json' in_file2='doors_stairs_val.json' out_file2='doors_stairs_val_out.json' 

В дальнейшем добавляя новые классы, необходимо менять n и x1,x2,x3, увеличивая последние на 10 000 (по сути это количество картинок в датасете, чтобы они не перекрывали id других картинок). Если картинок в новом custom датасете больше, то x1,x2,x3 нужно также увеличить «с запасом».
После выполнения конвертации, опять же, можно проверить конвертированные jsons. Будет видно, что категории, аннотации, параметры картинок в аннотациях изменились:

 {'supercategory': 'none', 'id': 45, 'name': 'door'} {'supercategory': 'none', 'id': 46, 'name': 'Stairs'} 

Склеиваем с Microsoft COCO.

Осталось самое интересное. Приклеить к датасету coco свой custom датасет, тем самым расширив количество классов.
Здесь на помощь приходит еще один скрипт, который посчастливилось написать:

join_jsons.py

 import json,os from time import sleep  json_one='44_coco_train.json' json_two='doors_stairs_train_out.json' out_file='coco46_train.json'  json_one2='44_coco_val.json' json_two2='doors_stairs_val_out.json' out_file2='coco46_val.json'  def transform(json_one,json_two,out_file):     with open(json_one) as json_one, open(json_two) as json_t:         data1 = json.load(json_one)         data2 = json.load(json_t)         #объединили категории             data1['categories'].extend(data2['categories'])         data1['annotations'].extend(data2['annotations'])         data1['images'].extend(data2['images'])              with open(out_file, 'w') as out_file:         json.dump(data1, out_file)          transform(json_one,json_two,out_file) transform(json_one2,json_two2,out_file2)  os.remove(json_two) os.remove(json_two2) 

Здесь надо быть внимательным, чтобы не склеить val с train:

 json_one='44_coco_train.json' json_two='doors_stairs_train_out.json' out_file='coco46_train.json'  json_one2='44_coco_val.json' json_two2='doors_stairs_val_out.json' out_file2='coco46_val.json' 

На выходе получаем готовые файлы аннотаций для дальнейшего обучения модели yolox уже на 46 классах, включая наши собственные.
Готовые файлы аннотаций — скачать.

И еще один важный момент.
Необходимо скопировать все картинки custom датасета в картинки coco датасета. Train custom датасета в train coco, val custom датасета в val coco.
А как же имена файлов?
С высокой долей вероятности имена файлов не будут пересекаться между собой. А привязка к картинкам по id указана в аннотациях, которые мы только что разобрали.

Продолжение следует.


ссылка на оригинал статьи https://habr.com/ru/post/680116/

Pollard’s Kangaroo находим решения дискретного логарифма secp256k1 PRIVATE KEY + NONCES в известном диапазоне

В этой статье мы рассмотрим самый быстрый алгоритм для ECDLP из области вычислительной теории чисел, кенгуру Полларда также называют алгоритм лямбды Полларда.

Метод кенгуру Полларда вычисляет дискретные логарифмы в произвольных циклических группах. Он применяется, если известно, что дискретный логарифм лежит в определенном диапазоне, скажем [ a , b ], а затем имеет ожидаемое время выполнения групповой операции.

Преимущество Pollard’s Kangaroo:

  • использует очень мало памяти

  • можно распараллелить с линейным ускорением

  • можно эффективно отслеживать требования к объему памяти

Все это делает метод кенгуру самым мощным методом решения задачи дискретного логарифмирования.

Один из способов сломать схемы подписи ECDSA — это решить проблему дискретного логарифмирования.

В настройках ECDSA алгоритмы субэкспоненциального времени, такие как метод индексного исчисления, не применяются, а лучшим известным на сегодняшний день методом решения лежащем в их основе DLP являются метод кенгуру Полларда. Мы постараемся не нагружать вас с различными теоретическими аспектами. Перейдем сразу к экспериментальной части.

Как мы знаем в блокчейне Биткоина отправитель монет BTC всегда раскрывает свой публичный ключ.

Для метода кенгуру Полларда достаточно знать публичный ключ или значение сигнатуры R ( значение R — это тоже своего рода публичный ключ от Nonces т.к. это точка координата x на плоскости эллиптической кривой secp256k1)

Остается только определить диапазон PRIVATE KEY или диапазон NONCES.

Случается такое что некоторые устройства которые создают подписиECDSAв блокчейне Биткоина могут частично раскрывать байты информации о значение "K" (NONCES)

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

В недалеком прошлом мы провели криптоанализ в блокчейне Биткоина и нашли несколько таких транзакции.

И так, взгляните на этот Биткоин Адрес на сумму вывода монет 501.06516041 BTC

В транзакциях этого Биткоин Адреса 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE была частичная раскрываемость байтов информации о значение "K" (NONCES)

Как мы знаем из прошлой нашей статьи

habr.com/ru/post/671932/
habr.com/ru/post/671932/

Поиск диапазона секретного ключа

Давайте найдем эту транзакцию и с помощью метода кенгуру Полларда восстановим секретный ключ

Ранее мы записывали видеоинструкцию«TERMINAL в Google Colab создаем все удобства для работ в GITHUB»

Откроем в терминале Google Colab [TerminalGoogleColab]

Для поиска RawTX воспользуемся репозиторием «01BlockchainGoogleDrive»

git clone https://github.com/demining/CryptoDeepTools.git  cd CryptoDeepTools/01BlockchainGoogleDrive/  chmod +x getrawtx.sh  ./getrawtx.sh 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Запуск Bash-скрипта: getrawtx.sh
Запуск Bash-скрипта: getrawtx.sh

Всё содержимые транзакции Биткоин Адреса 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE сохранилось в файл: RawTX.json

Открываем файл: RawTX.json и находим эту транзакцию [строка №10]

Воспользуемся утилитой export и сохраним эту строку №10 из RawTX.json отдельно в RawTX.txt

export LINE=10 ; sed -n "${LINE}p" RawTX.json > RawTX.txt
cat RawTX.txt

Узнаем TxID откроем сайт Decode Raw Bitcoin Hexadecimal Transaction и вставим наш RawTXВ результате мы получаем TxID

В результате мы получаем TxID

TxID: b5add54960756c58ebabb332c5ef89098d2c3b8f2107b939ec542178e846108b
TxID: b5add54960756c58ebabb332c5ef89098d2c3b8f2107b939ec542178e846108b

Открываем по ссылке TxID:
https://btc.exan.tech/tx/b5add54960756c58ebabb332c5ef89098d2c3b8f2107b939ec542178e846108b

Проверяем RawTX
Проверяем RawTX

Теперь узнаем частичную раскрываемость байтов информации о значение "K" (NONCES)

Для этого мы воспользуемся скриптом «RangeNonce»

«RangeNonce» — это скрипт по поиску диапазона секретного ключа

Выберем версию для дистрибутива GNU/Linux т.к. Google Colab предоставляет UBUNTU 18.04

RangeNonce
RangeNonce

Загрузим все файлы в Google Colab

RangeNonce + Google Colab
RangeNonce + Google Colab

Разрешим права доступа для скрипта и запустим скрипт «RangeNonce»

Команды:

chmod +x RangeNonce ./RangeNonce cat Result.txt

Все сохранится в файл: Result.txt

Result.txt
Result.txt

Это и есть частичная раскрываемость байтов информации значение «K» (NONCES)

И так, наш секретный ключ находится в диапазоне:

K = 070239c013e8f40c8c2a0e608ae15a6b00000000000000000000000000000000 K = 070239c013e8f40c8c2a0e608ae15a6bffffffffffffffffffffffffffffffff

Обратите внимание, на первоначальные 32 цифр и букв HEX формата значение сигнатуры Z совпадает с диапазоном секретного ключа то есть значение "K" (NONCES)

Это очень серьезная ошибка подписи ECDSA

Как мы говорили выше для метода кенгуру Полларда достаточно знать публичный ключ или значение сигнатуры R ( значение R — это тоже своего рода публичный ключ от Nonces т.к. это точка координата x на плоскости эллиптической кривой secp256k1)

Значение сигнатуры R в нашем случае:

R = 83fe1c06236449b69a7bee5be422c067d02c4ce3f4fa3756bd92c632f971de06

Скрипт RangeNonce добавил нужный нам префикс 02 создав сжатый публичный ключ

K_PUBKEY = 0283fe1c06236449b69a7bee5be422c067d02c4ce3f4fa3756bd92c632f971de06

Теперь у нас есть информация:

  • диапазон секретного ключа

  • сжатый публичный ключ

Воспользуемся исходным кодом для сборки программы Pollard’s Kangaroo от французского разработчика Jean-Luc PONS

Обратите внимание, что вы можете самостоятельно сделать сборку на CUDA для GPU чтобы увеличить скорость расчетов

Мы сделаем обычную сборку для CPU

Команды:

cd /  cd content/CryptoDeepTools/06KangarooJeanLucPons/  ls
sudo apt-get update
sudo apt-get install g++ -y sudo apt-get install libgmp3-dev libmpfr-dev -y

После всех установок пакетов сделаем сборку запустив простую команду:

make

Сборка прошла успешно!

Проверим версию:  ./kangaroo -v

И так, мы создали версию «Kangaroo v2.2»

Чтобы продемонстрировать работоспособность «Kangaroo v2.2» для CPU приподнимем диапазон и сохраним все в файл: rangepubkey.txt

Открываем текстовый файл: rangepubkey.txt

070239c013e8f40c8c2a0e608ae15a6b23d4a09295be678b2100000000000000 070239c013e8f40c8c2a0e608ae15a6b23d4a09295be678b21ffffffffffffff 0283fe1c06236449b69a7bee5be422c067d02c4ce3f4fa3756bd92c632f971de06
Очистим терминал командой:  clear

Запустим «Kangaroo v2.2» результат будет автоматический сохранен в файл: savenonce.txt

./kangaroo -ws -w save.work -wi 30 -o savenonce.txt rangepubkey.txt

Время поиска заняло 1 мин. 18 сек.

Результат в файле: savenonce.txt

Откроем файл: savenonce.txt

Мы получили секретный ключ это и есть значение «K» (NONCES)

Key# 0 [1S]Pub:  0x0283FE1C06236449B69A7BEE5BE422C067D02C4CE3F4FA3756BD92C632F971DE06         Priv: 0x70239C013E8F40C8C2A0E608AE15A6B23D4A09295BE678B21A5F1DCEAE1F634    070239C013E8F40C8C2A0E608AE15A6B23D4A09295BE678B21A5F1DCEAE1F634  K = 070239c013e8f40c8c2a0e608ae15a6b00000000000000000000000000000000 # RangeNonce K = 070239C013E8F40C8C2A0E608AE15A6B23D4A09295BE678B21A5F1DCEAE1F634 # NONCES K = 070239c013e8f40c8c2a0e608ae15a6bffffffffffffffffffffffffffffffff # RangeNonce

Закрытый ключ

Теперь зная значение "K" (NONCES) мы восстановим закрытый ключ к Биткоин Адресу: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE

Вернемся к началу, как мы помним скрипт «RangeNonce» раскрыл нам информацию о диапазоне значение "K" (NONCES), а так же информацию SIGNATURES

SIGNATURES
SIGNATURES
R = 83fe1c06236449b69a7bee5be422c067d02c4ce3f4fa3756bd92c632f971de06 S = 7405249d2aa9184b688f5307006fddc3bd4a7eb89294e3be3438636384d64ce7 Z = 070239c013e8f40c8c2a0e608ae15a6b1bb4b8fbcab3cff151a6e4e8e05e10b7

Получим закрытый ключ по формуле на Python-скрипт: calculate.py

PRIVKEY = ((((S * K) - Z) * modinv(R,N)) % N)

def h(n):     return hex(n).replace("0x","")  def extended_gcd(aa, bb):     lastremainder, remainder = abs(aa), abs(bb)     x, lastx, y, lasty = 0, 1, 1, 0     while remainder:         lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)         x, lastx = lastx - quotient*x, x         y, lasty = lasty - quotient*y, y     return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)  def modinv(a, m):     g, x, y = extended_gcd(a, m)     if g != 1:         raise ValueError     return x % m      N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 R = 0x83fe1c06236449b69a7bee5be422c067d02c4ce3f4fa3756bd92c632f971de06 S = 0x7405249d2aa9184b688f5307006fddc3bd4a7eb89294e3be3438636384d64ce7 Z = 0x070239c013e8f40c8c2a0e608ae15a6b1bb4b8fbcab3cff151a6e4e8e05e10b7 K = 0x070239C013E8F40C8C2A0E608AE15A6B23D4A09295BE678B21A5F1DCEAE1F634  print (h((((S * K) - Z) * modinv(R,N)) % N))

Команды:

wget https://raw.githubusercontent.com/demining/CryptoDeepTools/main/02BreakECDSAcryptography/calculate.py  python3 calculate.py 
PRIVKEY = 23d4a09295be678b21a5f1dceae1f634a69c1b41775f680ebf8165266471401b
PRIVKEY = 23d4a09295be678b21a5f1dceae1f634a69c1b41775f680ebf8165266471401b
ADDR: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE WIF:  5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e HEX:  23d4a09295be678b21a5f1dceae1f634a69c1b41775f680ebf8165266471401b
Проверяем закрытый ключ на сайте bitaddress
Проверяем закрытый ключ на сайте bitaddress

Закрытый ключ найден!

www.blockchain.com/btc/address/14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
www.blockchain.com/btc/address/14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE

Данный видеоматериал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN

Исходный код

Telegram: https://t.me/cryptodeeptech

Видеоматериал: https://youtu.be/UGUJyxOhBBQ

Источник: https://cryptodeep.ru/kangaroo



ссылка на оригинал статьи https://habr.com/ru/post/679626/