首页 > 其他分享 >rpc请求调用

rpc请求调用

时间:2024-08-01 19:27:35浏览次数:17  
标签:调用 请求 RPC rpc 2.0 区块 id

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

替换 为具体的交易哈希

在这里插入图片描述

标签:调用,请求,RPC,rpc,2.0,区块,id
From: https://blog.csdn.net/2401_84837659/article/details/140819178

相关文章

  • “postman请求JSON格式,Body内数据无法被idea后端接收,值为null“问题的解决方式
    问题描述:传递数据一切正常,但是:原因剖析:这是因为我们实体类里面属性的命名格式不符合驼峰命名,比如我这种“大写字母开头如CAD”/“一个小写字母+一个大写字母如aDddddd”都不行。解决方法:方法1:不推荐,不好用把自己实体类中的属性的名字都改成标准格式,要么是“全小写如id......
  • py调用webservice array数组老是为空的问题
    pythonwebserbiceserverimportloggingfromflaskimportFlaskfromspyne.applicationimportApplicationfromspyne.protocol.soapimportSoap11fromspyne.server.wsgiimportWsgiApplicationfromwerkzeug.servingimportrun_simplefromwerkzeug.middleware......
  • Frpc配置文件生成
    Frpc代理依赖Frpc.ini,本文介绍其配置操作1ini操作///<summary>///INI文件读写辅助类///</summary>internalstaticclassIniHelper{#regionPublicMethods///<summary>///写入INI文件///</summary>///<paramname=......
  • Frpc 内网穿透客户端配置教程
    github:https://github.com/fatedier/frp/releases1下载操作系统对应版本的Frpc.exe客户端程序2配置对应的frpc.ini文件3切换到Frpc.exe目录,cmd执行:Frpc.exe-cfrpc.ini 例如:frpc.ini如下例如 frps服务地址:10.10.10.10 端口10000本地服务端口5000,  frps域......
  • Android 10.0 第三方app授予DeviceOwner权限调用系统reboot,显示隐藏app,锁屏,禁用app
    1.前言 在10.0的系统rom定制化开发中,在有些客户开发app的功能中,需要系统授予app的DeviceOwner权限,然后app就可以实现重启关机禁用下拉通知栏,显示隐藏app,等功能,首选需要在app和framework中配置相关功能,接下来具体分析相关功能的实现2.第三方app授予DeviceOwner权限调用系......
  • await 调用的函数不一定必须是 async 函数。 await 关键字通常用于 async 函数内部,用
    await调用的函数不一定必须是async函数。 await关键字通常用于async函数内部,用来等待一个Promise对象的解决。但如果被await调用的对象不是Promise,那么它会被直接返回。 functionnotPromiseFunction(){return42;}asyncfunctionexample(){const......
  • Http发送Post请求 form-data 和 application/x-www-form-urlencoded 区别
    在HTTP协议中,使用POST请求时,可以通过不同的方式发送表单数据。form-data 和 application/x-www-form-urlencoded是两种常见的编码方式,它们在发送数据时有一些关键的区别:application/x-www-form-urlencoded编码方式:以键值对的形式进行编码,每个键值对之间用&符号连接,每个键和值......
  • 网页出现 404 这些代表什么你知道吗?带你了解网络请求状态码
    每个状态码都代表不同的含义,下面我们就一起来看一看这些状态码都代表什么意思。网络请求状态码网络请求状态码是服务器在响应客户端请求时返回的三位数字代码。这些代码用于指示请求的结果,包括成功、重定向、客户端错误和服务器错误。那网络状态码有哪些?大概可以分为这五类:1......
  • 监控Windows API调用
    原文链接:https://www.cnblogs.com/zhaotianff/p/17328559.html很早就知道有ApiMonitor这个软件,可以监控WindowsAPI调用,但当时没有正式的使用场景,所以也没怎么在意。APIMonitor简介APIMonitor可以监视、控制应用程序以及服务进行的WindowsAPI调用。分为32位和64位......
  • TypeError:ufunc 的循环不支持 dict 类型的参数 0,该类型没有可调用的 sqrt 方法
    我遇到了一个错误:psi_out_norm.append(np.sqrt(sorted_probs))TypeError:loopofufuncdoesnotsupportargument0oftypedictwhichhasnocallablesqrtmethod不知道如何解决此错误。下面是我正在处理的代码:num_qubits=2sorted_probs={'00':0.182613164......