gRPC Gateway JSON REST
在 irishub v1.0.0 中,节点继续提供 REST 服务。但是在 v0.16.3 和更早版本中存在的路由现在被标记为已弃用,并且已通过 gRPC-gateway 添加了新路由。
API 激活方式和配置
所有路由均通过 ~/.iris/config/app.toml
中以下字段下配置:
api.enable = true|false
字段定义是否启用 REST 服务,默认为true
。api.address = {string}
字段定义服务器应绑定到的地址(实际为端口,因为主机应保持在0.0.0.0
)。 默认为tcp://0.0.0.0:1317
。- 在
~/.iris/config/app.toml
中定义了一些其他 API 配置选项并附有注释,请直接参考该文件。
gRPC-gateway REST 路由
如果由于各种原因而不能使用 gRPC(例如,您正在构建 Web 应用,且浏览器不支持 gRPC 依赖的 HTTP2),则 IRIShub 会通过 gRPC-gateway 提供 REST 路由。
gRPC-gateway 是将 gRPC 端点公开为 REST 端点的工具。对于 Protobuf 服务中定义的每个 RPC 端点,SDK提供了 REST 等效项。例如,可以通过 /irismod.token.Query/Tokens
gRPC 端点,或者通过 gRPC-gateway /irismod/token/tokens
REST 端点来查询 token 列表:两种方式返回的结果相同。对于 Protobuf 服务中定义的每个 RPC 方法,都定义了一个相应的 REST 端点作为可选项:
+++ https://github.com/irisnet/irismod/blob/master/proto/token/query.proto#L22
对于应用程序开发者,需要将 gRPC-gateway REST 路由连接到 REST 服务器,通过在 ModuleManager 上调用 RegisterGRPCGatewayRoutes
方法完成。
Swagger
Swagger(或 OpenAPIv2 )规范文件在 API 服务器上的 /swagger
路径下。 Swagger 是一个开放的规范,描述服务器服务的 API 端点,包括描述、输入参数、返回类型以及有关每个端点的更多信息。
可以通过 ~/.iris/config/app.toml
中的 api.swagger
字段配置启用 /swagger
端点,默认为 true。
对于应用程序开发人员,您可能希望基于自定义模块生成自己的 Swagger 定义。可以从 IRIShub 的 Swagger 生成脚本开始。
API 端点
IRIShub API 端点
API Endpoints | Description | Legacy REST Endpoint |
---|---|---|
GET /cosmos/auth/v1beta1/accounts/{address} | 返回账户信息 | GET /auth/accounts/{address} |
GET /cosmos/auth/v1beta1/params | 查询所有参数 | |
GET /cosmos/bank/v1beta1/balances/{address} | 查询某个账户的所有 token | GET /bank/balances/{address} |
GET /cosmos/bank/v1beta1/balances/{address}/{denom} | 查询一个账户的单种 token 余额 | |
GET /cosmos/bank/v1beta1/denoms_metadata | 查询客户端所有已注册 token 的元数据 | |
GET /cosmos/bank/v1beta1/denoms_metadata/{denom} | 查询客户端一种 token 的元数据 | |
GET /cosmos/bank/v1beta1/params | 查询 bank 模块的参数 | |
GET /cosmos/bank/v1beta1/supply | 查询所有 token 的总发行量 | GET /bank/total |
GET /cosmos/bank/v1beta1/supply/{denom} | 查询一种 token 的总发行量 | GET /bank/total/{denom} |
GET /cosmos/distribution/v1beta1/community_pool | 查询社区池中的 token | GET /distribution/community_pool |
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards | 查询委托人在每个验证人处累计的总奖励 | GET /distribution/delegators/{delegatorAddr}/rewards |
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address} | 查询委托人在一个验证人处累积的奖励 | GET /distribution/delegators/{delegatorAddr}/rewards/{validatorAddr} |
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators | 查询一个委托人所有委托的验证人 | |
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address | 查询一个委托人的提款地址 | GET /distribution/delegators/{delegatorAddr}/withdraw_address |
GET /cosmos/distribution/v1beta1/params | 查询 distribution 模块参数 | GET /distribution/parameters |
GET /cosmos/distribution/v1beta1/validators/{validator_address}/commission | 查询一个验证人的累积佣金 | |
GET /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards | 查询一个验证人的奖励 | GET /distribution/validators/{validatorAddr}/outstanding_rewards |
GET /cosmos/distribution/v1beta1/validators/{validator_address}/slashes | 查询一个验证人的惩罚事件 | |
GET /cosmos/evidence/v1beta1/evidence | 查询所有 evidence | |
GET /cosmos/evidence/v1beta1/evidence/{evidence_hash} | 通过哈希查询 evidence | |
GET /cosmos/gov/v1beta1/params/{params_type} | 查询 gov 模块参数 | GET /gov/parameters/{params_type} |
GET /cosmos/gov/v1beta1/proposals | 查询指定状态的所有提议 | GET /gov/proposals |
GET /cosmos/gov/v1beta1/proposals/{proposal_id} | 通过 ID 查询提议 | GET /gov/proposals/{proposal-id} |
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits | 查询某个提议的所有抵押 | GET /gov/proposals/{proposal-id}/deposits |
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor} | 查询一个提议中一个抵押者的抵押信息 | GET /gov/proposals/{proposal-id}/deposits/{depositor} |
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/tally | 查询一个提议的投票统计 | GET /gov/proposals/{proposal-id}/tally |
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes | 查询一个提议的所有投票 | GET /gov/proposals/{proposal-id}/votes |
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter} | 查询一个提议中某个投票者的投票信息 | GET /gov/proposals/{proposal-id}/votes/{voter} |
GET /cosmos/params/v1beta1/params | 通过 subspace 和 key 查询一个模块的指定参数 | |
GET /cosmos/slashing/v1beta1/params | 查询 slashing 模块参数 | GET /slashing/parameters |
GET /cosmos/slashing/v1beta1/signing_infos | 查询所有验证人的签名信息 | GET /slashing/signing_infos |
GET /cosmos/slashing/v1beta1/signing_infos/{cons_address} | 查询一个地址的签名信息 | |
GET /cosmos/staking/v1beta1/delegations/{delegator_addr} | 查询一个委托人所有的委托信息 | GET /staking/delegators/{delegatorAddr}/delegations |
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations | 查询一个地址的重委托信息 | GET /staking/redelegations |
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations | 查询给定委托人的所有解委托信息 | GET /staking/delegators/{delegatorAddr}/unbonding_delegations |
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators | 查询指定委托人的所有验证人信息 | GET /staking/delegators/{delegatorAddr}/validators |
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr} | 查询指定验证人和委托人对的验证人信息 | GET /staking/delegators/{delegatorAddr}/validators/{validatorAddr} |
GET /cosmos/staking/v1beta1/historical_info/{height} | 查询指定高度的历史信息 | |
GET /cosmos/staking/v1beta1/params | 查询 staking 模块参数 | GET /staking/parameters |
GET /cosmos/staking/v1beta1/pool | 查询池子信息 | GET /staking/pool |
GET /cosmos/staking/v1beta1/validators | 查询匹配指定状态的所有验证人 | GET /staking/validators |
GET /cosmos/staking/v1beta1/validators/{validator_addr} | 通过验证人地址查询验证人信息 | GET /staking/validators/{validatorAddr} |
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations | 查询一个验证人的委托信息 | GET /staking/validators/{validatorAddr}/delegations |
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr} | 查询指定验证人和委托人之间的委托信息 | GET /staking/delegators/{delegatorAddr}/delegations/{validatorAddr} |
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation | 查询指定验证人和委托人之间的解委托信息 | GET /staking/delegators/{delegatorAddr}/unbonding_delegations/{validatorAddr} |
GET /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations | 查询一个验证人的解委托信息 | GET /staking/validators/{validatorAddr}/unbonding_delegations |
GET /cosmos/upgrade/v1beta1/applied_plan/{name} | 通过名称查询已应用的升级计划 | |
GET /cosmos/upgrade/v1beta1/current_plan | 查询当前升级计划 | |
GET /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height} | 查询共识状态,该状态将用作此链的下一版本的受信任内核 | |
GET /ibc/core/channel/v1beta1/channels | 查询所有 IBC channel | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id} | 查询一个 IBC channel | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state | 查询与提供的 channel ID 关联的 channel 的客户端状态 | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height} | 查询与提供的 channel ID 关联的 channel 的共识状态 | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence | 返回给定 channel 的下一个接收 sequence | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements | 返回与 channel 关联的所有 packet 确认 | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence} | 查询已存储 packet 的 acknowledgement hash | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments | 返回与 channel 关联的所有 packet commitment hash | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks | 返回与 channel 和 sequences 关联的所有未接收的 IBC 确认 | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets | 返回与 channel 和 sequence 关联的所有未接收的 IBC 数据包 | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence} | 查询已存储 packet 的 commitment hash | |
GET /ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence} | 查询链上是否收到给定的 packet sequence | |
GET /ibc/core/channel/v1beta1/connections/{connection}/channels | 查询 connection 关联的所有 channel | |
GET /ibc/client/v1beta1/params | 查询 ibc client 模块参数 | |
GET /ibc/core/client/v1beta1/client_states | 查询一条链的所有 IBC 轻客户端 | |
GET /ibc/core/client/v1beta1/client_states/{client_id} | 查询一个 IBC 轻客户端 | |
GET /ibc/core/client/v1beta1/consensus_states/{client_id} | 查询与给定客户端相关联的所有共识状态 | |
GET /ibc/core/client/v1beta1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height} | 查询与给定高度的客户端状态相关联的共识状态 | |
GET /ibc/core/connection/v1beta1/client_connections/{client_id} | 查询与客户端状态关联的连接路径 | |
GET /ibc/core/connection/v1beta1/connections | 查询所有的 IBC connection | |
GET /ibc/core/connection/v1beta1/connections/{connection_id} | 查询一个 IBC connection | |
GET /ibc/core/connection/v1beta1/connections/{connection_id}/client_state | 查询与 connection 关联的客户端状态 | |
GET /ibc/core/connection/v1beta1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height} | 查询与 connection 关联的共识状态 | |
GET /ibc/applications/transfer/v1beta1/denom_traces | 查询所有 IBC token 的 denom 的追踪信息 | |
GET /ibc/applications/transfer/v1beta1/denom_traces/{hash} | 查询一个 IBC token 的 denom 追踪信息 | |
GET /ibc/applications/transfer/v1beta1/params | 查询 ibc-transfer 模块参数 | |
GET /irismod/token/params | 查询 token 模块参数 | |
GET /irismod/token/tokens | 查询 token 列表 | |
GET /irismod/token/tokens/{denom} | 通过名称查询 token | |
GET /irismod/token/tokens/{symbol}/fees | 查询发型或增发 token 的费用 | |
GET /irismod/token/total_burn | 返回所有销毁的 token | |
GET /irismod/htlc/htlcs/{hash_lock} | 通过指定 hash lock 查询 HTLC | |
GET /irismod/coinswap/liquidities/{denom} | 返回指定 denom 的交易对的所有流动性 | |
GET /irismod/nft/collections/{denom_id} | 返回指定 denom 的所有 NFT | |
GET /irismod/nft/collections/{denom_id}/supply | 查询一个 denom 发行的 NFT 的总量 | |
GET /irismod/nft/denoms | 查询所有的 denom | |
GET /irismod/nft/denoms/{denom_id} | 根据 denom ID 查询 denom 定义 | |
GET /irismod/nft/nfts | 查询指定地址拥有的所有 NFT | |
GET /irismod/nft/nfts/{denom_id}/{token_id} | 根据 denom ID and token ID 查询 token | |
GET /irismod/service/bindings/{service_name} | 返回一个服务的所有绑定 | |
GET /irismod/service/bindings/{service_name}/{provider} | 返回一个服务的一个 provider 的绑定信息 | |
GET /irismod/service/contexts/{request_context_id} | 返回 request context | |
GET /irismod/service/definitions/{service_name} | 返回服务定义 | |
GET /irismod/service/fees/{provider} | 返回 provider 获得的服务费用 | |
GET /irismod/service/owners/{owner}/withdraw-address | 返回 provider 的提款地址 | |
GET /irismod/service/params | 查询 service 模块参数 | |
GET /irismod/service/requests/{request_context_id}/{batch_counter} | 返回一个批次中所有的请求 | |
GET /irismod/service/requests/{request_id} | 返回服务请求 | |
GET /irismod/service/requests/{service_name}/{provider} | 返回一个服务中对一个 provider 的所有请求 | |
GET /irismod/service/responses/{request_context_id}/{batch_counter} | 返回一个服务请求批次的所有响应值 | |
GET /irismod/service/responses/{request_id} | 返回请求的响应值 | |
GET /irismod/service/schemas/{schema_name} | 返回 schema | |
GET /irismod/oracle/feeds | 查询 feed 列表 | |
GET /irismod/oracle/feeds/{feed_name} | 查询 feed | |
GET /irismod/oracle/feeds/{feed_name}/values | 查询 feed 值 | |
GET /irismod/random/queue | 查询随机数请求队列 | |
GET /irismod/random/randoms/{req_id} | 查询随机数生成结果 | |
GET /irismod/record/records/{record_id} | 通过记录 ID 查询记录 | |
GET /irishub/mint/params | 查询 mint 模块参数 | |
GET /irishub/guardian/supers | 返回所有超级账户 |
Tendermint API 端点
API 端点 | 描述 | Legacy REST 端点 |
---|---|---|
GET /cosmos/base/tendermint/v1beta1/blocks/latest | 返回最新高度的区块 | GET /blocks/latest |
GET /cosmos/base/tendermint/v1beta1/blocks/{height} | 查询指定高度的区块 | GET /blocks/{height} |
GET /cosmos/base/tendermint/v1beta1/node_info | 查询当前节点信息 | GET /node_info |
GET /cosmos/base/tendermint/v1beta1/syncing | 查询节点同步信息 | GET /syncing |
GET /cosmos/base/tendermint/v1beta1/validatorsets/latest | 查询当前区块验证人集合 | GET /validatorsets/latest |
GET /cosmos/base/tendermint/v1beta1/validatorsets/{height} | 查询指定高度验证人集合 | GET /validatorsets/{height} |
POST /cosmos/tx/v1beta1/simulate | 模拟交易执行以预估 Gas 消耗 | |
GET /cosmos/tx/v1beta1/txs | 通过事件筛选交易 | GET /txs |
POST /cosmos/tx/v1beta1/txs | 广播交易 | POST /txs |
GET /cosmos/tx/v1beta1/txs/{hash} | 通过哈希查询交易 | GET /txs/{hash} |
构造和签名交易
使用 REST 不能构造和签名交易,只能广播交易。您可以使用 gRPC 客户端 构造和签名交易。
广播交易
使用 gRPC-gateway REST 端点 cosmos/tx/v1beta1/txs
广播交易可以通过发送 POST 请求来完成,如下所示,其中 txBytes
是已签名交易的 protobuf 编码的字节数组:
curl -X POST \
-H "Content-Type: application/json" \
-d'{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \
"localhost:1317/cosmos/tx/v1beta1/txs"
查询交易
使用 gRPC-gateway REST 端点查询事务可以通过发送 GET 请求来完成,示例如下所示:
Query tx by hash:
/cosmos/tx/v1beta1/txs/{hash}
curl -X GET \ -H "accept: application/json" \ "http://localhost:1317/cosmos/tx/v1beta1/txs/{hash}"
Query tx by events:
/cosmos/tx/v1beta1/txs
curl -X GET \ -H "accept: application/json" \ "http://localhost:1317/cosmos/tx/v1beta1/txs?events={event_content}"