Cosmos的gRPC与Go

Cosmos与Go语言

gRPC

gRPC的基本概念(维基百科):

  1. gRPC (gRPC Remote Procedure Calls) 是一个跨平台的开源高性能远程过程调用(RPC)框架。
  2. gRPC最初由Google创建,它使用一个通用的RPC基础设施Stubby来连接其数据中心内外运行的大量微服务。
  3. gRPC基于HTTP/2协议传输数据,使用Protocol Buffers作为接口描述语言,并提供认证(authentication)、双向流(bidirectional streaming)和流量控制、阻塞或非阻塞绑定以及取消和超时(Deadlines)等功能。它为许多语言生成跨平台的客户端和服务器绑定。最常见的使用场景包括在微服务风格的架构中连接服务,或将移动设备客户端连接到后端服务。

Cosmos中的gRPC

Cosmos SDK 提供了两种主要接口与区块链交互:gRPC 和 CLI(命令行接口)。

  1. gRPC: gRPC 是一种现代化的远程过程调用协议,支持高效的数据传输。Cosmos SDK 的 gRPC 服务允许开发者通过编程语言访问区块链节点,适用于高性能应用和集成第三方服务。例如,可以使用 gRPC 查询账户余额、交易历史或提交交易。
  2. CLI: CLI 是用户通过命令行与区块链交互的工具,适合手动测试和简单任务。Cosmos 提供 cosmos-sdk-cli,支持查询链信息、管理账户、发送交易等功能。CLI 直观,适合调试和快速验证网络状态。

相比于CLI,gRPC具有更高的灵活性,gRPC 支持多种编程语言(如 Go、Python、Java、JavaScript 等),可以轻松集成到复杂系统或自动化流程中。

并且gRPC 使用二进制协议(Protocol Buffers),数据传输快,适合高频交互或实时系统,除此之外通过 gRPC,可以实现自定义客户端逻辑、复杂的交互模式(如双向流通信),不受 CLI 功能限制。

在cosmos-sdk中,client 文件中有grpc/cmtservicegrpc/nodegrpc/refection三个包用于实现grpc的不同功能

Go调用gRPC服务

  1. 首先在cosmos-sdk里simapp的配置文件中,开启grpc服务,默认位置在 ./private/.simapp/config/app.toml中

    bash 复制代码
    ###############################################################################
    ###                           gRPC Configuration                            ###
    ###############################################################################
    
    [grpc]
    
    # Enable defines if the gRPC server should be enabled.
    enable = true
    
    # Address defines the gRPC server address to bind to.
    address = "0.0.0.0:9090"

    将enable字段设置为true,即可开启grpc服务。

  2. 在Go中调用远程grpc服务
    首先,确定gRPC服务地址

    go 复制代码
    // gRPC 服务地址
    rpcEndpoint := "xxx.xxx.xxx.xxx:9090"

    建立gRPC连接

    go 复制代码
    // 建立gRPC连接
    conn, err := grpc.NewClient(rpcEndpoint, grpc.WithInsecure())
    if err != nil {
    	log.Fatalf("Failed to connect to gRPC server: %v", err)
    }
    defer conn.Close()

    创建Tendermint服务客户端

    go 复制代码
    // 创建Tendermint服务客户端
    client := cmtservice.NewServiceClient(conn)

    之后可以使用client与区块链进行交互。
    具体功能请看cosmos-sdk/client/rpc/cmtservice

相关推荐
傻小胖16 小时前
21.ETH-权益证明-北大肖臻老师客堂笔记
笔记·区块链
硅基流动20 小时前
硅基流动 × ValueCell:8K+Star,去中心化金融智能体加速投资决策
金融·去中心化·区块链
devmoon20 小时前
使用 Hardhat 在 Polkadot Hub 测试网部署基础 Solidity 合约(完整实战指南)
web3·区块链·智能合约·波卡·hardhat
威胁猎人21 小时前
【黑产大数据】2025年全球KYC攻击风险研究报告
大数据·区块链
焦点链创研究所1 天前
去中心化实体基础设施网络的崛起:比较分析
网络·去中心化·区块链
有代理ip1 天前
Python 与 Golang 爬虫的隐藏优势
爬虫·python·golang
天远云服1 天前
天远车辆过户查询API微服务实战:用Go语言构建高性能车况溯源系统
大数据·微服务·架构·golang
MicroTech20251 天前
微算法科技(NASDAQ :MLGO)量子测量区块链共识机制:保障数字资产安全高效存储与交易
科技·安全·区块链
女王大人万岁1 天前
Go标准库 sync 详解
服务器·开发语言·后端·golang
小高Baby@1 天前
session、cookie、Jwt-token
开发语言·后端·golang