Injective Typescript Technical Concepts
Изучение этих понятий поможет вам стать более эффективным разработчиком dApps на базе Injective. Мы будем давать краткие пояснения, чтобы донести до читателя только необходимый контекст. Мы рекомендуем разработчикам изучить эти концепции более подробно в удобное для них время.
Узел Sentry
Узел Sentry - это доступный только для чтения полный узел, на котором запущена цепочка Injective. Полный узел - это сервер, на котором запущен бинарный файл цепочки (ее программное обеспечение), который полностью проверяет транзакции и блоки блокчейна и ведет полную запись всей исторической активности. Полный узел отличается от обрезанного узла, который обрабатывает только заголовки блоков и небольшое подмножество транзакций. Для работы полного узла требуется больше ресурсов, чем для работы обрезанного узла. Валидаторы могут принять решение о запуске либо полного, либо обрезанного узла, но при этом они должны быть уверены, что сохранили достаточно блоков, чтобы иметь возможность валидировать новые блоки.
Мы запрашиваем узел sentry, чтобы получить данные о цепочке, обслуживаемые нашим децентрализованным приложением.
API индексатора
Indexer API - это набор микросервисов, которые обслуживают данные, проиндексированные цепочкой Injective. Цепочка Injective выдает события при включении транзакции, и в API Indexer есть слушатель событий, который прослушивает эти события, обрабатывает их и сохраняет данные в MongoDB. Запрос непосредственно к цепочке - это дорогой (и менее производительный) вызов API, чем запрос к API, обслуживающему данные из MongoDB, для чего и существует API Indexer.
Еще одним преимуществом использования Indexer API является потоковая передача данных. MongoDB может передавать обновления в коллекциях/документах в потоковом режиме, что может быть весьма полезно для удобства работы пользователей. Таким образом, нам не нужно опрашивать данные, вместо этого мы можем подписаться на поток и обновлять состояние нашего dApp на основе обновлений, транслируемых в потоке.
Наконец, API Indexer может предоставлять исторические данные или данные, обработанные за определенный период времени (например, для построения графиков и т.д.).
Транзакции
Подробнее о совершении транзакций в Injective можно узнать здесь.
Деном
Денон - это способ представления активов в банковском модуле Injective. Эти активы могут быть использованы для торговли, создания новых рынков в модуле обмена, участия в аукционах, перевода на другой адрес и т.д.
В зависимости от происхождения денома и способа его создания в Injective существуют различные типы деномов:
Родные деномы - существует только один денон этого типа, денон inj, который представлял собой родную монету Injective,
Peggy denoms - эти деномы представляют активы, переведенные из Ethereum в Injective с помощью моста Peggy. Они имеют следующий формат peggy{ERC20_CONTRACT_ADDRESS}.
Деномы IBC - эти деномы представляют собой активы, переведенные из других цепочек Cosmos через мост IBC. Они имеют следующий формат ibc/{hash}.
Деномы страховых фондов - эти деномы представляют собой токены акций страховых фондов, созданных на Injective. Они имеют следующий формат share{id}.
Factory Denoms - эти деномы представляют токен CW20 из Cosmwasm на модуле нативного банка Injective. Они имеют следующий формат factory/{CW20_ADAPTER_CONTRACT}/{CW20_CONTRACT_ADDRESS}, где CW20_ADAPTER_CONTRACT - это адрес контракта адаптера, который выполняет преобразование между CW20 и родным банковским модулем.
Токен
Токен - это просто дензнак в цепочке Injective с некоторой метаинформацией. Метаданные включают в себя такую информацию, как символ, название, десятичные знаки, логотип конкретного денома и т.д. Метаданные денома очень важны для разработчика dApp, так как информация на цепочке хранится в сыром виде (например, 1inj на цепочке представляется как 1*10^18inj), поэтому нам необходимо иметь возможность показать пользователю человекочитаемую информацию (цифры, логотип, символ и т.д.). Для преобразования денома в токен мы создали класс абстракции в рамках sdk-ts, который использует пакет token-metadata для преобразования известных деномов в представление токена.
Торговый счет
Субсчета или торговые счета - это концепция, позволяющая разделить средства в собственном модуле Injective Bank (которые могут использоваться для ставок, участия в аукционах, управления, создания рынков и т.д.) на изолированный торговый счет, с которого можно совершать сделки. Один Injective-адрес может иметь неограниченное количество торговых счетов. Их представление выглядит следующим образом: ${ethereumAddress}${subaccountNonce}, где ethereumAddress - это шестнадцатеричная версия инъекционного адреса bech32, а subaccountNonce - это nonce, представленный в 12 байтах. Примером торгового счета с nonce 1 будет 0xc7dca7c15c364865f77a4fb67ab11dc95502e6fe00000000000000000001.
Начиная с обновления цепочки v1.10.0, баланс банка и торгового счета по умолчанию (с nonce = 0) будут объединены, и средства банка будут напрямую использоваться при совершении сделок с торгового счета по умолчанию.
gRPC и Protobuf
gRPC - это современный высокопроизводительный фреймворк удаленного вызова процедур (RPC) с открытым исходным кодом, который может работать в любой среде. Он позволяет эффективно соединять сервисы в центрах обработки данных и между ними благодаря подключаемой поддержке балансировки нагрузки, трассировки, проверки работоспособности и аутентификации. Он также применяется на "последней миле" распределенных вычислений для подключения устройств, мобильных приложений и браузеров к внутренним сервисам.
Protobuf - это наиболее часто используемый IDL (язык определения интерфейсов) для gRPC. В нем вы храните свои данные и контракты функций в виде файла proto.
message Person { required string name = 1; required int32 id = 2; optional string email = 3; }