Tendermint bft что это простыми словами
Home on Rails
Success is not final, failure is not fatal: it is the courage to continue that counts. Winston Churchill
© 2021. All rights reserved.
Коротко о Tendermint и Cosmos Network
Ниже приведен текст заметки, которая была написана при подготовке к участию в подкасте “Базовый Блок”. Это не в коем случае не исчерпывающий источник, а лишь короткий обзор включающий плюсы и минусы Tendermint, Cosmos. Также упоминается проект Polkadot.
Выпуск со мной можно послушать здесь.
Tendermint
Tendermint это алгоритм консенсуса устойчивый к византийским падениям. Византийские падения для тех кто не знает, это какие-то злоумышленные действия. Алгоритм был придуман в 2014 году Джае Квоном, который был озабочен проблемой высокого энергопотребления сети Bitcoin’а. В отличие от Nakamoto консенсуса, где выбирается цепочка с самым большым количеством работы, в Tendermint выбирается цепочка где за блок проголосовало 2/3 участников сети. Это упрощенная версия. Здесь я использую слово блок для понимания, на самом деле это может быть чем угодно (any value).
В чем принципиальные отличия:
Раз это подкаст без буллшита 🙂 расскажу про отрицательные стороны.
В чем минусы алгоритма:
В чем инновация Tendermint:
В будущем планируется предоставить приложению возможность менять алгоритм выбора ноды создателя блока, совмещенные подписи (BLS) и многое другое.
Cosmos Network
Космос призван решить проблему отсутствия коммуникации между независимыми блокчейнами. Делает он это посредством нового протокола (IBC). Вроде TCP/IP, только для блокчейнов. Кто (блокчейн А) отправляет кому (блокчейн B) что (100 попугаев) + заголовок блока + доказательство merkle перехода в новый стейт.
Чтобы следить за состоянием балансов блокчейнов и уменьшить количество связей между ними, были придуманы хабы (аналог свича в Интернете). Собственно недавно был запущен первый хаб (Cosmos Hub). Чтобы вы понимали, “аналогичные” вещи есть и в Polkadot (там это называется Relay), Ethereum 2.0 (beacon chain), Near protocol (beacon chain).
Cosmos также предоставляет SDK, написанный как и Tendermint на языке Go, для разработки приложений. В него включены модуль переводов, модуль управления (governance), IBC модуль чтобы взаимодействовать с другими блокчейнами. Позже будут добавлены другие модули (например NFT).
Аналогично с Tendermint, приведу основные минусы:
В чем инновация Cosmos:
Алгоритм консенсуса Tendermint
Содержание статьи
Tendermint – движок для блокчейнов. Для валидации блоков использует алгоритм консенсуса BFT PoS (Byzantine Fault Tolerant Proof-of-Stake). Языковой агностик – протокол ABCI позволяет работать с механизмом на программных языках: Java, C++, Python, Go, JavaScript, Rust….
Главное отличие Tendermint – скорость финализации. Транзакция включается в блок за секунды и не требует ждать подтверждения.
История создания
В 2014 году Джэ Квон в поисках решения оптимизации работы узлов в глобальных сетях (Wide Area Networks, WAN) разработал новый протокол, основанный на BFT (первые алгоритмы создавались в MIT в 1988). Tendermint – проект с открытым исходным кодом. Концептуально демонстрировал достижение секьюрности в сети с большим количеством нод.
Спустя 4 года, в 2018 году проект Cosmos (ATOM) начал использовать движок Tendermint.
Что такое задача византийских генералов?
Основная идея, как достичь консенсус быстро – требовать правды хотя-бы от ⅔ (66%) узлов.
Byzantine Consensus Algorithm (или BFT, Byzantine Fault Tolerance) использует решение этой задачи. Пусть есть 4 генерала и им требуется согласовать действия. Они могут обмениваться письмами. Каждый генерал в письме сообщает о численности войск. Образуются векторы. Их сравнивают, и ложная информация, и её источник, обнажаются на фоне всех данных.
Ноды в блокчейне действуют по тому же принципу. Если кто-то транслирует неверное состояние сети (балансы, транзакции), алгоритм Tendermint будет исключать их из процесса валидации. Часто – штрафовать. BFT использует и популярная сеть Ethereum.
Особенности протокола Tendermint
Tendermint Inc. – организация. Она открыто предоставляет доступ к движку Tendermint Core и API – Application Blockchain Interface (ABCI).
Tendermint Core
Протокол, промежуточное программное обеспечение. Получает код на любом программном языке и безопасно реплицирует его на множество машин.
Отвечает за распространение данных о блоках и транзакциях по узлам, фиксирует их порядок.
Протокол Bitcoin обслуживает базу неизрасходованных выходов (UTXO), подпись и валидацию транзакций, предотвращение попытки двойных трат. Что делает его монолитным. На Tendermint эти обязанности возлагаются отдельно на ABCI.
Application Blockchain Interface (ABCI)
Простое API для приложений.
Передаёт данные в Tendermint Core через 3 отдельных соединения:
ABCI как отдельный слой может работать на любых языках программирования.
Детерминизм
Консенсус в Tendermint был бы невозможен без предсказуемости. Язык Solidity (Ethereum) тоже детерминирован.
Для этого свободные языки (Java, C++, Python, Go…) частично ограничивают от источников псевдослучайности: генераторы случайных чисел, соревновательные состояние потоков, системные часы, неинициализированная память, арифметика с плавающей запятой.
Статический анализатор проверяет код на детерминизм (эту задачу разработчики могут выполнять и вручную), и так Tendermint достигает консенсус в условиях мультиязычности.
Достижение консенсуса
Валидаторы поочередно предлагают блоки и голосуют за их фиксацию в рамках одного механизма. Раунды разработчики именуют полькой (в честь танца). ⅔ участников должны сойтись в мнении касательно предложения, чтобы оно было одобрено и сеть пошла дальше.
Если предлагающий узел долго не отвечает или находится не в сети – остальные ждут некоторое время, и затем пропускают его. Зависимость от тайм-аута делает Tendermint слабо синхронным протоколом, но в остальном он асинхронен.
Стейкинг
Чтобы валидатор получил право голосовать, он должен заморозить свои монеты на время работы. В Tendermint это называется «бондинг». Криптовалюта замораживается на несколько месяцев, во избежание атак. Это отличает Тендерминт от многих PoS систем.
Силу голоса определяет количество монет в стейкинге. Простые пользователи могут доверить свой стейк валидаторам и получать долевую доходность.
Преимущества и недостатки Tendermint
Примеры использования
Fabric – использует реализацию PBFT (1999) для изучения возможности исполнения недетерминированного цепного кода. По итогам работы можно выпустить Fabric как приложение ABCI для Tendermint.
Ethermint – экспериментальная версия сети Ethereum на Tendermint.
Burrow – копия виртуальной машины Ethereum и механики транзакций, но с дополнительными функциями: реестр имён, права, нативные контракты, альтернативный блокчейн API.
Алгоритм консенсуса Tendermint – полный обзор
Tendermint – это алгоритм консенсуса, характеризующийся устойчивостью к византийским падениям (BFT). Протокол создавался под Cosmos Network, который запустился в марте 2019 года. Основной акцент делается на валидаторах, поддерживающих работоспособность сети. Поскольку Tendermint и Cosmos разрабатываются одной командой и формируют единую масштабируемую сеть, рассмотрим взаимодействие и особенности этих двух проектов.
История создания
Пост технического директора занимает Заки Маниан.
Алгоритмы консенсусов
С момента появления Proof-of-Work (PoW), который задействован в самой первой криптовалюте Биткоин, была проделана большая работа по поиску новых алгоритмов консенсуса. Использование старого PoW со временем перестало удовлетворять потребности блокчейна, пересмотру подвергалось все: устойчивость к ряду новых атак, пропускная способность, масштабирование и т. д.
Сегодня не так много проектов, которые решают сразу все эти проблемы. Прежде всего это криптовалюты на Proof-of-Stake, такие как BitShares, Lisk, EOS, еще можно выделить NEM, который функционирует на Proof-of-Importance. Но сегодня мы подробно остановимся на Tendermint.
Валидаторы
В алгоритмах PoS и PoW, майнером может стать каждый желающий в любое время, тогда как в Tendermint поддержку сети осуществляют валидаторы.
Правила, по которым обычный пользователь может получить функции валидатора, зависят от реализации проекта. Если говорить о простых случаях, там валидаторы изначально объявляются в genesis блоке и в дальнейшем их список не меняется. Такое решение повышает уязвимость к атакам, тем не менее, его применяют многие сети. Правда, они требуют, чтобы количество византийский валидаторов не превышало 1/3 от общего числа.
Особенность Tendermint в том, что он дает возможность применить механизм ротации валидаторов. Чтобы ввести данную функцию, в протоколе нужно указать транзакцию, которая отправляется участником в случае, если он намерен баллотироваться и выполнил для этого все требования, прописанные той или иной сетью. Также разработчики могут применять механизм голосования, как в Lisk.
Tendermint дает возможность получить список валидаторов для любого блока. В процессе голосования валидаторы подписывают отправляемые сообщения своими приватными ключами, при этом идентифицируются они по публичным ключам. Это дает возможность определить автора голоса. Таким образом, посторонние не могут принимать участие в построении консенсуса.
Справка! Транзакции на изменение списка валидаторов ничем не отличаются от обычных транзакций. Они все сохраняются в блокчейн и доступны каждому, кто хочет посмотреть список валидаторов.
Схема
Рассмотрим, что же происходит в алгоритме при подписании блока N.
Propose – определяется алгоритмом в зависимости от его веса в списке. Что подразумевается под понятием «вес», каждый разработчики определяет индивидуально. В самых простых случаях вес всех валидаторов равноценный, то есть выбор будет равномерным. Выбор по весу дает 2 преимущества: необходимую детерминированность и защиту от атак, которые связаны с определенной последовательностью выбора. Propores предлагает собственный блок на высоту N.
Prevote – на этом этапе валидаторы «оценивают» блок. В самом простом случае они отправляют сообщение на подобии «Согласен с полученной информацией».
Precommit – этап проверки накопленных Prevote сообщений. Если одобрительных заявок 2/3 и больше, валидатор отправляет системное сообщение Precommit. Если же голосов недостаточно, ставится пометка Precommit nil.
Все три этапа, которые изображены в скобках на скрине, составляют раунд. Его смысл в том, чтобы при обнаружении подозрительных действий не допустить создание блока. Но не всегда причина кроется в недобросовестности prosper-а. Как вариант, он может быть офлайн. В таком случае система вносит в консенсус определенные изменения:
В официальной документации Tendermint приведена иллюстрация, которая изображает весь процесс:
Злонамеренный proposer
Чтобы понять принцип работы алгоритма, рассмотрим пример:
Для создания блока X требуется пройти все этапы поочередно. Сначала нужно создать блок и запустить его в сеть. Важно уложиться в заданное время, иначе информация не дойдет к валидаторам.
Следующий шаг – Prevote. Валидаторы должны проверить блок, одобрить или отклонить его. Если B, C, D, E не признают рассматриваемый блок, они отправляют сетевое сообщение с пометкой Prevote nil.
Предположим, у валидатора E плохой интернет и ему не хватило времени на получение информации. Пользователь A хочет поддержать свой блок и отправляет системе одобрительное сообщение – Prevote. Поскольку у валидатора E трудности с интернетом, к нему не дошло сообщение ни от одного участника процесса.
Сообщения каждого валидатора на данном этапе выглядят так:
Через перебои с Интернетом никто из участников не получил сообщение от пользователя E.
Теперь участники переходят на заключительный этап – Precommint. Prevote сообщения каждого не набирают 2/3 голосов, поэтому они отправляют сообщение с пометкой Precommit nil (за исключением валидатора E, у которого по-прежнему нет интернета).
Сообщения выглядят следующим образом:
Никто не собрал 2/3 голосов, поэтому раунд заканчивается без создания блока высоты X.
Справка! Не менее 2/3 precommit сообщений находится в каждом блоке. Если пользователь A захочет раскидать по сети некорректный блок, он не получит нужное количество сообщений для его подтверждения. Подвох может заметить каждый из участников.
Оптимальный сценарий
В предыдущем раунде блок не был создан. Теперь система предполагает переизбрание proposper. Пускай в это раз им будет участник B. Чтобы не допустить медленного соединения, время выполнения каждого этапа будет немного увеличено.
Начинаем с первого шага. Информация о валидности блока дошла до всех участников. Предположим, A продолжает оставаться злонамеренным и старается помешать процессу. Картина для каждого пользователя выглядит так:
Теперь у всех участников достаточно голосов для одобрения блока. Все они (кроме A) отправляют сообщение с пометкой Precommint. Пользователь A отправляет – Precommint nil, хотя это не совсем правильно с его стороны.
В этом случае злонамеренные действия не помешали набрать 2/3 голосов, поэтому генерация блока состоялась.
Tendermint Core
Tendermint Core объединяет консенсус Tendermint с p2p протоколом. Когда все эти элементы собираются в программный стек, получается Tendermint Core с прикладным уровнем Cosmos-SDK.
Таким образом, архитектура Tendermint Core имеет 3 уровня:
Рассмотрим каждый из них подробно.
Сетевой уровень
Сеть – это одноранговый стек. С помощью интерфейса ABCI любая цепочка может запускаться поверх консенсуса Tendermint. В качестве приложения, Tendermint использовал виртуальную машину Ethereum, создав проект под названием Ethermint.
Все эти цепочки используют одно программное обеспечение, поэтому могут формировать отдельную и самодостаточную сеть.
Уровень консенсуса
Платформа Tendermint первой начала использовать алгоритм византийской отказоустойчивости. Он передает информацию об отказах, или о том, что сеть не скомпрометирована.
Для многих систем обнаружение неисправного или злонамеренного компонента – довольно сложный процесс. Технические характеристики Tendermint позволяют справиться с этой задачей, обеспечивая качественную и перебойную работу сети.
Уровень приложения
Это конечная точка, где Dapps и токены используются как надстройка над Tendermint. Элементы сети объединяются в программный стек.
До запуска Ethereum, создать ПО с нуля было чрезвычайно сложно. В качестве платформы использовалось приложение EVM, которое обеспечивало связь с необходимыми элементами. Блоки создавались поверх основной сети. Но это имело существенный недостаток – разработчики не могли осуществлять полный контроль над собственными приложениями. Виртуальная машина диктовала свои стандарты, а предложения разработчиков не имели значения.
Tendermint предлагает запуск готовых приложений поверх сети Tendermint Core. При этом сетевые уровни и консенсус обрабатываются в автоматическом режиме. Приложения могут обмениваться информацией через интерфейс ABCI.
Платформа Cosmos
Cosmos Network создан для взаимодействия существующих блокчейнов. Также на базе сети можно создавать новые приложения. Платформа старается расширить возможности цепочек и создать систему распределенных независимых блокчейнов, которые будут называться хабами или зонами. Внутри системы будет развиваться здоровая конкуренция, при этом существующие блокчейны смогут с легкостью общаться и взаимодействовать друг с другом. Платформа предлагает выгодные условия всем участникам системы: валидаторам, делегатам, разработчикам и простым пользователям.
Валидаторы
Поддержку сети Cosmos обеспечивают валидаторы. Чтобы обеспечить децентрализацию, после подписанных результатов голосования, они обязаны их транслировать.
На счету у каждого валидатора должны находится токены ATOM, замороженные на определенный период времени. 100 первых валидаторов Cosmos были назначены в день запуска сети. Они определялись по результатам купленных токенов в процессе ICO. Разработчики Cosmos заявили, что количество валидаторов каждый год будет увеличиваться на 13 %, пока их количество не составит 300.
Валидаторы могут выбирать любые транзакции, принимать оплату за них в любой криптовалюте, устанавливать обменные курсы на свое усмотрение. Но существуют правила, которые они обязаны соблюдать, в частности подписывать валидные транзакции и находиться онлайн. Если валидатор нарушает правила, система уменьшает долю токенов на счету в рамках оговоренных условий конкретной зоны.
Делегаты
Делегатами являются все пользователи, у которых на счету находятся токены Атом. Они могут передавать свои активы в доверительное управление валидатором. Для повышения безопасности сети, разработчики внедрили механизм, согласно которому все риски по доверительной передаче средств берут на себя делегаты. Это стимулирует их ответственно подходить к выбору валидаторов.
Фонд вознаграждения делегатов состоит из транзакционных комиссий и инфляционных издержек. Валидаторы в свою очередь получают комиссию от держателей Атом. Они могут самостоятельно устанавливать комиссию, но обычно она на одном уровне, поскольку невыгодных лидеров делегаты быстро заменяют новыми. Если валидатор захочет делегировать, он должен использовать для этого свободные монеты Атом.
Поскольку делегаты выбирают валидаторов, они несут ответственность за их действия.
На данный момент все участники сети получают вознаграждение в токенах Атом. Уровень дохода зависит от внутренней политики конкретного хаба. Поскольку к Comos постепенно будут добавляться новые проекты, со временем пользователи смогут получать вознаграждение в других валютах. Но функция стейка будет закреплена за Атомом постоянно.
Разработчики
Cosmos-SDK дает возможность создавать приложения на любом программном языке. Также разработчики могут запускать свои проекты на Ethermint, при условии, что в них не применяется блокчейн, и не задействуются валидаторы.
На базе платформы можно разворачивать бизнес-модели блокчейн-проектов при помощи универсального интерфейса ABCI. Также Cosmos предлагает фреймфорк Lotion, который позволит использовать JavaScript для создания своих проектов. Фреймфорк функционирует поверх Tendermint и применяет интерфейс ABCI.
Разработчики готовых приложений могут создавать для них hard spoons, подобно Ethermint. Таким образом, будут разрабатываться дополнительные элементы для существующих экосистем.
Пользователи
Пользователи не вовлечены в процесс достижения консенсуса, но система привлекает их по ряду других причин:
А еще проект поощряет хакеров, которые выявляют уязвимости на раннем этапе. При обнаружении эксплойта, работа ответственных валидаторов и делегатов приостановится, и доля их средств будет перенаправлена на счет этого хакера.
Отличия Tendermint от Casper
Задача византийских генералов была озвучена Шостаком, Пизом и Лампортом еще в 1982 году. Она описывалась как «надежная система из ненадежных запчастей» для коммуникационных распределенных сетей. До 1998 года никто так и не создал систему, которая успешно решала бы BTF. Следует признать, что на тот момент в ней не особо нуждались, поскольку Интернет только начинал эволюцию от централизованных к распределенным вычислениям. Единственное, что было нужно – это отказоустойчивость.
Первым отказоустойчивым алгоритмом стал Paxos. Его создали в 1998 году, и в течение 15 лет он оставался единственным в своем роде. Второй протокол, получивший широкое распространение, появился только в 2015 году. Это Raft. Что касаемо PBFT, с 1999 года он оставался в стенах академических организаций и не выходил за их рамки. В блокчейне его впервые применил Сатоши Накамото, после чего технологией активно заинтересовались другие исследователи. Они начали искать способы ее реализации в реальном мире.
В 2011 году на bitcointalk начали обсуждать идею, которая после реализации стала называться Proof-of-Stake. Но первые эксперименты, например, Peercoin, подорвали доверие к технологии за счет неудачной реализации. Только в 2014 году Дже Квон предложит внедрить BFT в PoS. В результате появился алгоритм под названием Tendermint.
В тот момент разработчики считали, что узлы в системе будут оставаться стабильными на протяжении длительного времени. PoS применялся исключительно их этого допущения. Но реальные условия блокчейна были совсем другие.
Дже Квон первым предложил соединить блокчейн и BFT, используя динамический набор валидаторов и их последующую ротацию. Чуть позже эту идею подхватили другие проекты, такие как Tezos, Casper, Honeybadger. Хотя платформы по-разному подходили к реализации, цель оставалась единой – достижение уровня безопасности, подобного PoW, но без расходования материальных ресурсов. PoS предлагает замену мощности хеширования на мощность голосования, деноминированную в нативной валюте. Но «чистая» версия алгоритма не может решить всех проблем блокчейна, в частности угрозу атак, рост централизации и т. д. Поэтому разработчики продолжают привлекать инвестиции для исследования PoS и его модификации.
Ниже я рассмотрю 3 варианта PoS, которые составляют основу трех криптовалютных протоколов: Tendermint, Casper от Влада Замфира и Casper FFG от Бутерина.
Tendermint
PoS-алгоритм на основе BFT дает валидаторам право предлагать новые блоки, за которые голосуют остальные участники. Процесс состоит из многих раундов и требует большинства голосов для финализации блоков. Если поддержка будет меньше 2/3 от общего количества валидаторов, блок не закроется. На подтверждение может потребоваться несколько раундов. Технология BFT терпима только к 1/3 сбоев, где сбои – это недобросовестное или произвольное поведение.
Механизм консенсуса Tendermint Core гарантирует, что на каждом ПК одни и те же транзакции записываются в одинаковом порядке.
Casper Влада Замфира (Vlad Zamfir)
Casper CBC – алгоритм разработанный с нуля и оптимизированный для противостояния пулам валидаторов. Замфир адаптировал протокол GHOST под PoS (GHOST изначально разрабатывался под PoW). Casper CBC предлагает достижение безопасности за счет криптоэкономических методов. В отличие от Casper Бутерина, это чистая PoS концепция. Подобно протоколу PoW, CBC жертвует согласованностью ради доступности. Но у CBC и Casper Бутерина есть общее свойство – голова цепи увеличивается гораздо быстрее, чем финализируются блоки.
Уникальное свойство Casper CBC заключается в том, что валидатор сам выбирает целевые уровни безопасности. Этот процесс осуществляется аналогично подтверждению транзакций в Биткоине, например, 6 принятых сообщений формируют общепринятый параметр для финализации. Но по сравнению с PoW, CBC поддерживает низкий уровень дополнительного времени.
Преимущество обеих версий Casper над Tendermint заключается в количестве валидаторов, одновременно принятых системой. Финализация блоков в Tendermint происходит параллельно с их созданием, поэтому времени на создание отводится немного. Это ограничивает количество валидаторов с правом голоса.
Casper не предусматривает мгновенную финализацию, поэтому имеет большее количество валидаторов.
Casper Виталика Бутерина
Casper FFG – это своего рода надстройка над PoW в Эфириуме. Проще говоря, это гибридный алгоритм, который объединяет PoS и PoW.
Протоколы PoW в Биткоине и Эфириуме не принимают окончательных решений, получается, что теоретически блоки можно переписать до прошлой высоты цепочки. Блок становится финализированным только в том случае, если его невозможно переписать ни при каких обстоятельствах.
PoW не гарантирует финализацию, поэтому на уровне консенсуса его нельзя назвать безопасным. Чем глубже PoW блоки погружаются в блокчейн, тем выше шансы на их финализацию. Внедрение FFG в блокчейн добавит этому процессу свойство необратимости и сопротивляемости «атаке 51 %». Переход от PoW к PoS происходит поэтапно.
Механизм Casper заложен в смарт-контрактах. Чтобы стать валидатором, пользователю необходимо отправить на смарт-контракт конкретное количество монет. В первой генерации Casper, процесс предложения блоков останется прежним, как в Биткоине. Надстройка лишь будет их финализировать при помощи валидаторов.
Главный элемент PoS консенсуса FFG – чекпойнты – это каждый 50 блок, финализация которого оценена протоколом. Чекпойнты формируют сегменты из 50 блоков, называемые эпохой. В Ethereum появляются первые валидаторы, голосующие за блоки в каждой эпохе.
Финализация чекпойнта из предыдущей эпохи состоит из 2 раундов:
Этот процесс финализирует первый блок во второй эпохе, которая называется LFE.
Таким образом, основное отличие Casper от Tendermint заключается в том, что в первом случае вместо псевдослучайного определения валидаторов, лидеры могут предлагать те блоки, которые они видели. Кроме того, Casper предполагает большее количество валидаторов, участвующих в подтверждении блока.
Преимущества и недостатки Tendermint
Главная задача Tendermint – предоставить разработчикам практичный инструмент с высокой пропускной способностью.
Из недостатков могу отметить то, что если нода за установленное время не создает блок, участники процесса ждут некоторое время до начала следующего раунда.
Заключение
Когда мы говорим о Tendermint, чаще всего подразумеваем утилиту https://github.com/tendermint/tendermint/, в состав которой входит данный алгоритм. Это программный стек, который состоит из алгоритма консенсуса, p2p сети, RPC, ABCI – интерфейса и т. д.
С помощью консенсуса достигается согласие в группе. Голосование устанавливает правила большинства, и часто интересы меньшинства не учитываются. Tendermint обеспечивает соглашение, которое несет пользу всем участникам сети. Консенсус может использоваться группой людей, разбросанных по всему земному шару, для создания равноправного и справедливого сообщества.
Tendermint обеспечивает исключительную производительность. Пропускная способность, которая превышает 1000 транзакций в секунду, обеспечивается даже в неблагоприятных условиях, когда валидаторы транслируют злонамеренные действия.