rpc请求调用

RPC的请求调用

一、远程过程调用(RPC)

RPC(Remote Procedure Call,远程过程调用)是客户端与区块链系统交互的一套协议和接口。用户通过RPC接口可查询区块链相关信息(如块高、区块、节点连接等)和发送交易。

1 .名词解释

  • JSON(JavaScript Object Notation):一种轻量级的数据交换格式。它可以表示数字、字符串、有序序列和键值对。
  • JSON-RPC:一种无状态、轻量级的远程过程调用协议。 该规范主要定义了几个数据结构及其处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。它使用JSON (RFC 4627)作为数据格式。FISCO BCOS采用JSON-RPC 2.0协议。

2.模块架构

在这里插入图片描述

RPC模块负责提供FISCO BCOS的外部接口,客户端通过RPC发送请求,RPC通过调用账本管理模块p2p模块获取相关响应,并将响应返回给客户端。其中账本管理模块通过多账本机制管理区块链底层的相关模块,具体包括共识模块同步模块,区块管理模块,交易池模块以及区块验证模块。

3.数据定义

(1)客户请求

客户端请求发送至区块链节点会触发RPC调用,客户端请求包括下列数据成员:

  • jsonrpc: 指定JSON-RPC协议版本的字符串,必须准确写为“2.0”。
  • method: 调用方法的名称。
  • params: 调用方法所需要的参数,方法参数可选。由于FISCO BCOS 2.0启用了多账本机制,因此本规范要求传入的第一个参数必须为群组ID。
  • id: 已建立客户端的唯一标识ID,ID必须是一个字符串、数值或NULL空值。如果不包含该成员则被认定为是一个通知。

RPC请求包格式示例:

{"jsonrpc": "2.0", "method": "getBlockNumber", "params": [1], "id": 1}

注:

  • 在请求对象中不建议使用NULL作为id值,因为该规范将使用空值认定为未知id的请求。
  • 在请求对象中不建议使用小数作为id值,因为具有不确定性。
(2)服务器响应

当发起一个RPC调用时,除通知之外,区块链节点都必须回复响应。响应表示为一个JSON对象,使用以下成员:

  • jsonrpc: 指定JSON-RPC协议版本的字符串。必须准确写为“2.0”。
  • result: 正确结果字段。该成员在响应处理成功时必须包含,当调用方法引起错误时必须不包含该成员。
  • error: 错误结果字段。该成员在失败是必须包含,当没有引起错误的时必须不包含该成员。该成员参数值必须为3.3节中定义的对象。
  • id: 响应id。该成员必须包含,该成员值必须与对应客户端请求中的id值一致。若检查请求对象的id错误(例如参数错误或无效请求),则该值必须为空值。

RPC响应包格式示例:

{"jsonrpc": "2.0", "result": "0x1", "id": 1}

注: 服务端响应必须包含result或error成员,但两个成员不能同时包含。

(3) 错误对象

当一个RPC调用遇到错误时,返回的响应对象必须包含error错误结果字段,相关的描述和错误码,请参考:RPC 错误码

4、RPC接口的设计

FISCO BCOS提供丰富的RPC接口供客户端调用。其中分为3类:

  • 以get开头命名的查询接口:例如[getBlockNumber]接口,查询最新的区块高度。
  • [sendRawTransaction]接口: 执行一笔签名的交易,将等待区块链共识后才返回响应。
  • [call]接口: 执行一个请求将不会创建一笔交易,不需要区块链共识,而是获取响应立刻返回。

5、 RPC接口列表

参考RPC API文档

二、实战演练

示例一:获取当前块号(getblocknumber)

curl -X POST --data '{"jsonrpc":"2.0","method":"getBlockNumber","params":[1],"id":1}' http://127.0.0.1:8545 |jq

在这里插入图片描述

示例二:获取指定交易的交易信息(getTransactionByHash)

curl -X POST --data '{"jsonrpc":"2.0","method":"getTransactionByHash","params":[1,"0x216ec766ce9b72f6e12dcbf24c98237a7a82c7151907fb5645822418ff542472"],"id":1}' http://127.0.0.1:8545 |jq

替换 为具体的交易哈希

在这里插入图片描述

示例三:获取节点信息(getNodeInfo)

curl -X POST --data '{"jsonrpc":"2.0","method":"getNodeInfo","params":[],"id":1}' http://127.0.0.1:8545 | jq

在这里插入图片描述

示例四:获取交易收据(getTransactionReceipt)

curl -X POST --data '{"jsonrpc":"2.0","method":"getTransactionReceipt","params":[1,"0x708b5781b62166bd86e543217be6cd954fd815fd192b9a124ee9327580df8f3f"],"id":1}' http://127.0.0.1:8545 |jq

替换 为具体的交易哈希

815fd192b9a124ee9327580df8f3f"],"id":1}' http://127.0.0.1:8545 |jq

替换 为具体的交易哈希

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都想学。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值