![](https://mms.team/wp-content/uploads/2023/01/yaebtume_400x400.jpg)
Резюме
- Для таких задач, как развертывание смарт-контракта или получение баланса кошелька, разработчики отправляют запросы и получают ответы от узла. Стандартный набор процедур, необходимых для этого, включает протокол связи, называемый удаленным вызовом процедур (RPC).
- Полные, архивные и трассировочные узлы в Cosmos используют Tendermint Core («узлы Tendermint»), который состоит из алгоритма консенсуса и сети P2P для репликации данных между узлами. Доступ к данным цепочки Cosmos обычно осуществляется через конечные точки RPC, предоставляемые узлами Tendermint этой цепочки.
- В настоящее время разработчики, создающие приложения на Cosmos, в основном получают доступ к данным блокчейна через альтруистически управляемые общедоступные узлы, скорость которых ограничена и недостаточна для проектов производственного уровня.
- Протокол Lava обеспечивает масштабируемый, приватный и не подлежащий цензуре доступ к точным данным блокчейна.
Резюме — что такое RPC?
Точно так же, как веб-приложения, такие как Facebook, взаимодействуют с внутренними серверами, а затем с базами данных для хранения и доступа к данным, внешним интерфейсам веб-3 нужен способ доступа к данным блокчейна. Фундаментальная идея блокчейна заключается в том, что каждый клиент может запускать свой собственный узел, который поддерживает копию последнего состояния.
Для доступа к состоянию узлы предоставляют конечные точки RPC. Узлы RPC можно запускать локально или получать удаленный доступ. Из-за непрактичности запуска и обслуживания узлов доступ к данным блокчейна обычно осуществляется через службы поставщиков узлов или общедоступные конечные точки, поддерживаемые грантами экосистемы.
Узлы RPC необходимы приложениям для:
- Считайте данные из блокчейна и представьте их пользователям.
- Получайте подписанные транзакции пользователей из кошельков и распространяйте их на остальную часть p2p-сети, чтобы использовать их валидаторы при построении блоков.
Приложения получают доступ к данным блокчейна с помощью узлов, и связь с этими узлами работает через RPC:
![Как узлы RPC обеспечивают доступ к данным блокчейна](https://miro.medium.com/max/721/1*beZtHEpEkVbklcjlbZkxgQ.png)
RPC позволяет одному компьютеру удаленно выполнять функции (процедуры) на другом компьютере. RPC — это форма взаимодействия «запрос-ответ» между клиентом и сервером: клиент отправляет запрос, а сервер отвечает ответом на этот запрос.
Это последовательность событий при вызове метода RPC:
- Клиент заинтересован в запуске функции на удаленном сервере.
- Вызов RPC инициируется клиентом со всеми соответствующими данными (имя функции, параметры и т. д.).
- Вызов отправляется на целевой удаленный сервер, который обрабатывает запрос и выполняет процедуру.
- Удаленный сервер отправляет ответ клиенту
- Теперь клиент может использовать ответ для запуска логики своего приложения.
Tendermint RPC
В экосистеме Cosmos разработчики используют Cosmos Software Development Kit (SDK) для создания цепочек приложений. Эти цепочки приложений реализуют механизм консенсуса Tendermint Core, который включает алгоритм консенсуса Byzantine-Fault Tolerant для обеспечения того, чтобы одни и те же транзакции записывались на каждой машине в одном и том же порядке.
Кроме того, каждая цепочка приложений требует, чтобы узлы предоставляли конечные точки RPC для обслуживания клиентских запросов на данные цепочки, а также для распространения транзакций на другие узлы в сети. В Cosmos часто используемой конечной точкой является конечная точка Tendermint RPC, независимая от Cosmos SDK. Каждый узел в сети может выбрать, предоставлять ли свои конечные точки Tendermint RPC, которые по умолчанию будут обслуживаться через порт 26657.
Клиенты могут использовать эту конечную точку для получения актуальных данных о состоянии тремя различными способами:
1. URI через HTTP:
завиток локальный: 26657/блок? высота = 5
2. JSON-RPC через HTTP (почтовый запрос):
curl --header "Content-Type: application/json" --request POST --data '{"method": "block", "params": ["5"], "id": 1}' localhost:26657
3. JSON-RPC через WebSocket (для асинхронных функций):
ws ws://localhost:26657/websocket
> { "jsonrpc": "2.0", "method": "подписаться", "params": ["tm.event='NewBlock'"], "id": 1 }
Стоит отметить, что еще одним распространенным способом взаимодействия с узлом в Cosmos является использование gRPC , независимой от языка высокопроизводительной среды удаленного вызова процедур (RPC). Различия между gRPC и RPC будут рассмотрены в последующих статьях.
Блокчейн-кейс: Osmosis RPC
Используя RPC, клиенты (например, кошельки и приложения) могут отправлять транзакции и запрашивать у блокчейнов информацию, такую как высота блока, блоки, баланс кошелька и т. д.
![](https://miro.medium.com/max/721/1*cy-w_PvgOdrWnqX2kVwiPw.png)
Например, предположим, что вы хотите разработать децентрализованное приложение в цепочке Osmosis. Поскольку цепочка Osmosis построена с использованием Cosmos SDK, первое, что вам нужно сделать, это импортировать cosmWasm
библиотеку. Затем вам нужно будет подключиться к узлу RPC, чтобы ваше децентрализованное приложение могло получать данные:
rpcEndpoint
- URL-адрес RPC узла Osmosis
client
- Клиентский объект CosmWasm, который позволит нам взаимодействовать и получать данные из Osmosis. Обратите внимание, что мы будем только читать данные, если мы хотим совершить транзакцию, нам нужно будет настроить подписывающую сторону с мнемоникой.
Двигаясь дальше, давайте поиграем с объектом клиента:
Когда у нас есть клиентский объект, сконфигурированный с узлом RPC, мы можем начать запрашивать у узла информацию из блокчейна. В примере выше мы проверили баланс Cosmostation, одного из крупнейших валидаторов в цепочке Osmosis . Попробуйте запустить код еще раз, используя свой собственный адрес кошелька или другой действительный адрес на Osmosis, и убедитесь, что вы получите результат, подобный этому:
{ номинал: 'уосмо', сумма: '17134426559' }
Как видите, результатом звонка стало число 17134426559
, которое представляет баланс адреса osmo1khp3a8edarjaxfvlgdrcwthnjp3vdr3ez6p3xe
.
В приведенных выше примерах все запросы, сгенерированные с использованием объекта клиента, направляются на узел Blockchain RPC через JSON-RPC .
JSON-RPC
JSON-RPC — это упрощенный протокол удаленного вызова процедур (RPC) без сохранения состояния, который использует JSON (RFC 4627) в качестве формата данных. Другими словами, JSON-RPC — это протокол RPC, закодированный в формате JSON, позволяющий:
- Обычные звонки (форма Запрос — Ответ)
- Уведомления (отправляемые на сервер данные, не требующие ответа)
- Множественные вызовы, которые должны быть отправлены на сервер, на которые можно ответить асинхронно
JSON-RPC широко используется для связи клиент-сервер в экосистеме Cosmos и в Интернете3. Большинство цепочек имеют спецификацию JSON-RPC, которая описывает все функции, поддерживаемые данной конкретной цепочкой блоков, подобно API. Например, вы можете найти спецификацию цепочки Osmosis в их документации здесь .
Примеры JSON-RPC
Получение баланса кошелька
В предыдущем разделе мы смогли получить баланс конкретного кошелька в цепочке Osmosis с помощью библиотеки Javascript CosmWasmClient
. Когда мы выполняем функцию client.getBalance(string address, string searchDenom)
, библиотека в фоновом режиме реализует протокол JSON-RPC и отправляет запрос JSON-RPC , который выглядит следующим образом:
Разбивка запроса JSON-RPC выше:
- jsonrpc: версия протокола, которую мы используем.
2.0
- метод: метод, который мы вызываем. В нашем примере мы хотим получить баланс адреса с помощью метода
balance
- params: параметры, которые будут отправлены вызываемому методу. В нашем примере мы запрашиваем баланс токена
uosmo
для адресаosmo1khp3a8edarjaxfvlgdrcwthnjp3vdr3ez6p3xe
- id: Идентификация клиента, отправляющего вызов
Сервер/узел ответит следующим ответом JSON-RPC :
Разбивка ответа JSON-RPC выше:
- id: идентификация клиента
- jsonrpc: версия протокола
- результат: Результат выполненной функции
Получение данных блока
Другой полезный пример — получение определенного блока из цепочки. Когда клиент (кошелек, децентрализованное приложение и т. д.) хочет получить данные блока с определенным номером блока (высотой) цепочки Osmosis, он отправляет следующий запрос JSON-RPC :
Разбивка запроса JSON-RPC выше:
- jsonrpc: версия протокола, которую мы используем.
2.0
- метод: метод, который мы вызываем. В нашем примере мы хотим получить номер последнего блока, используя блок
- params: параметры для отправки в метод, который мы вызываем. В нашем примере мы запрашиваем информацию для номера блока
5347769
- id: Идентификация клиента, отправляющего вызов
Сервер/узел ответит следующим ответом JSON-RPC :
Давайте разберем приведенный выше ответ JSON-RPC:
- id: идентификация клиента
- jsonrpc: версия протокола
- результат: Результат выполненной функции
Чтобы узнать больше о поддерживаемых методах Osmosis и Cosmos RPC, ознакомьтесь с документацией Osmosis RPC и документацией Cosmos Tendermint RPC .
Доступ к конечным точкам RPC в Cosmos
В более зрелых экосистемах, таких как Ethereum, служба RPC хорошо обеспечивается централизованными предложениями, например, Alchemy, Infura. Однако из-за своей относительной молодости и разнообразия клиентов в разных блокчейнах Cosmos относительно недостаточно обслуживается для RPC. Большинство ретрансляторов RPC, созданных в экосистеме Cosmos, поддерживаются общедоступными конечными точками, часто управляемыми самими цепями.
Все доступные конечные точки для цепочек Cosmos можно найти в реестре цепочек Cosmos , который предоставляет информацию о доступе RPC для цепочек, включая Osmosis, Akash, Stride и Secret Network.
Lava Network предлагает подотчетную инфраструктуру узлов RPC для экосистемы Cosmos. Приложения могут получать доступ к данным блокчейна без разрешения через сеть поставщиков узлов, которые вознаграждаются за высокое качество обслуживания и наказываются за плохое обслуживание. Качество обслуживания согласовывается на основе децентрализованного консенсуса, а также определяется показателями производительности в одноранговых сетях. Таким образом, протокол обеспечивает устойчивость к цензуре, низкую задержку, максимальное время безотказной работы, высокую доступность и целостность данных.
Заключение
Инфраструктурный уровень RPC web3 позволяет любому приложению получать доступ к данным блокчейна. RPC используется для запроса состояния блокчейна, например баланса кошелька или данных блока. Распространенным форматом RPC, используемым в web3, является JSON-RPC.
В более зарождающихся экосистемах, таких как Cosmos, многие конечные точки RPC альтруистически управляются самими цепочками. Это неустойчиво и не масштабируется для приложений производственного уровня. Lava — это более устойчивое решение, обеспечивающее доступ RPC для всех цепочек и созданное с учетом таких ценностей web3, как децентрализация и устойчивость к цензуре с первого дня.
Следите за новостями Lava в Твиттере , чтобы быть в курсе последних событий в этой области. Вы также можете узнать больше на lavanet.xyz .
Lava
Lava — это протокол, который предоставляет приложениям масштабируемый, частный и не подлежащий цензуре доступ к точным данным блокчейна. Используя криптографию и поощрения, связанные с токенами, протокол возлагает на узлы RPC ответственность за целостность данных и качество работы. Управляющие узлами получают вознаграждение за предоставление надежного сервиса RPC, внося свой вклад в децентрализацию.
Ответственность, а не доверие 🌋