# gRPC Server
gRPC Server — расширение ноды, которое позволяет запускать gRPC-сервисы.
gRPC-сервисы предоставляют информацию про:
gRPC Server можно использовать на легкой ноде.
# Генерация клиента
Для подключения к gRPC-сервисам используются клиенты, которые генерируются из proto-файлов.
Пример использования gRPC-клиента, сгенерированного из .proto-файлов: Загрузка блоков на C#.
Для создания TypeScript- или JavaScript-клиента рекомендуем использовать библиотеку node-api-grpc.
# Установка расширения на ноду
gRPC Server можно установить на ноду двумя способами: с помощью DEB-пакета и с помощью TGZ-архива.
# Установка с помощью DEB-пакета
Скачайте последнюю версию DEB-пакета со страницы Releases (секция Assets).
Имя пакета с расширением:
• для Mainnet
grpc-server_{номер версии}_all.deb
• для Testnet
grpc-server-testnet_{номер версии}_all.deb
• для Stagenet
grpc-server-stagenet_{номер версии}_all.deb
Установите пакет.
Для Mainnet:
sudo dpkg -i grpc-server_{номер версии}_all.deb
Для Testnet:
sudo dpkg -i grpc-server-testnet_{номер версии}_all.deb
Для Stagenet:
sudo dpkg -i grpc-server-stagenet_{номер версии}_all.deb
Отредактируйте файл конфигурации ноды (см. раздел Конфигурация ноды). Для Mainnet файл конфигурации находится по адресу
/etc/waves/waves.conf
, для Testnet —/etc/waves-testnet/waves.conf
, для Stagenet —/etc/waves-stagenet/waves.conf
.3.1. Добавьте gRPC Server в секцию
waves.extensions
:waves { ... extensions = [ com.wavesplatform.api.grpc.GRPCServerExtension ] }
3.2. Если требуется изменить порт для подключения клиента (по умолчанию 6870), добавьте настройку:
waves { ... grpc { port = 6877 # Укажите порт }
3.3. Если требуется предоставить внешний доступ к grpc-серверу вашей ноды, используйте Nginx’s proxy pass module или SSH port forwarding.
Более простой, но не рекомендуемый способ — добавить настройку:
waves { ... grpc { ... host = 0.0.0.0 # Укажите IP-адрес }
Перезапустите ноду.
Для Mainnet:
sudo systemctl restart waves
Для Testnet:
sudo systemctl restart waves-testnet
Для Stagenet:
sudo systemctl start waves-stagenet
# Установка с помощью TGZ-архива
Скачайте TGZ-архив с расширением со страницы Releases (секция Assets) на GitHub.
Имя TGZ-архива с расширением:
• для Mainnet
grpc-server-{номер версии}.tgz
• для Testnet
grpc-server-testnet-{номер версии}.tgz
• для Stagenet
grpc-server-stagenet-{номер версии}.tgz
Распакуйте архив в папку с JAR-файлом ноды.
Создайте новый файл конфигурации или откройте существующий (см. раздел Конфигурация ноды).
3.1. Добавьте gRPC Server в секцию
waves.extensions
:waves { ... extensions = [ com.wavesplatform.api.grpc.GRPCServerExtension ] }
3.2. Если требуется изменить порт для подключения клиента (по умолчанию 6870), добавьте настройку:
waves { ... grpc { port = 6877 # Укажите порт }
Выполните команду:
Для Mainnet:
java -cp 'waves-all-{номер версии}.jar:grpc-server-{номер версии}/lib/*' com.wavesplatform.Application {имя файла конфигурации}.conf
Для Testnet:
java -cp 'waves-all-{номер версии}.jar:grpc-server-testnet-{номер версии}/lib/*' com.wavesplatform.Application {имя файла конфигурации}.conf
Для Stagenet:
java -cp 'waves-all-{номер версии}.jar:grpc-server-stagenet-{номер версии}/lib/*' com.wavesplatform.Application {имя файла конфигурации}.conf
В Windows используйте
;
вместо:
, например:java -cp 'waves-all-{номер версии}.jar;grpc-server-{номер версии}/lib/*' com.wavesplatform.Application {имя файла конфигурации}.conf
# gRPC на публичных нодах
С целью ознакомления вы можете подключиться к общедоступным gRPC-сервисам, которые предоставляет команда Waves:
- Mainnet: nodes.wavesnodes.com:6870
- Testnet: nodes-testnet.wavesnodes.com:6870
- Stagenet: nodes-stagenet.wavesnodes.com:6870
Ограничения:
- Количество одновременных запросов с одного IP-адреса — не более 5.
- Количество запросов в секунду с одного IP-адреса — не более 20.
# Отладка с помощью gRPCurl
gRPCurl — инструмент командной строки для взаимодействия с серверами gRPC, аналог curl
для gRPC. С помощью gRPCurl вы можете без написания кода сделать запрос к gRPC-серверу ноды Waves и получить данные в терминале.
Использование gRPCurl:
Получить список сервисов
Пример запроса:
grpcurl -plaintext nodes.wavesnodes.com:6870 list
Пример ответа:
grpc.reflection.v1alpha.ServerReflection waves.node.grpc.AccountsApi waves.node.grpc.AssetsApi waves.node.grpc.BlockchainApi waves.node.grpc.BlocksApi waves.node.grpc.TransactionsApi
Получить список функций сервиса
grpcurl -plaintext nodes.wavesnodes.com:6870 describe waves.node.grpc.AssetsApi
service AssetsApi { rpc GetInfo ( .waves.node.grpc.AssetRequest ) returns ( .waves.node.grpc.AssetInfoResponse ); rpc GetNFTList ( .waves.node.grpc.NFTRequest ) returns ( stream .waves.node.grpc.NFTResponse ); }
Получить описание сообщения
grpcurl -plaintext nodes.wavesnodes.com:6870 describe waves.node.grpc.AssetRequest
waves.node.grpc.AssetRequest is a message: message AssetRequest { bytes asset_id = 1; }
Выполнить запрос к gRPC-серверу
Укажите в запросе параметр
-d
и аргументы в формате JSON.grpcurl -plaintext \ -d '{ "asset_id": "PFrWEj4csGLWzPmlsjs/xccLxChfBm27mGoHZtYJSzU=" }' \ nodes.wavesnodes.com:6870 waves.node.grpc.AssetsApi/GetInfo
{ "issuer": "+DXhXpxJzivkcqVUIh0dPuze4ThmLFnYVutb7RRxrSs=", "name": "DogWhite", ... "sequenceInBlock": 1, "issueHeight": 2563608 }
⚠️ Все массивы байтов в JSON должны быть представлены в кодировке base64, в том числе адреса, идентификаторы ассетов и другие данные, которые в REST API ноды представлены в base58. Ответ также содержит данные в кодировке base64.