vlambda博客
学习文章列表

以太坊JSON-RPC远程过程调用协议

任何想建立更快的网站,或者当今互联网在用户界面和数据交换方面的运作方式的人都应该阅读 JSON和JavaScript。 所有这些技能构成了网站组成部分,改善了用户体验,并进入了当今编程中最热门的趋势: 建立区块链。

JSON-RPC只是一个远程过程调用协议,用于以太坊定义不同的数据结构。不仅如此,它还定义了网络中数据结构处理方式的规则。由于它是传输不可知的,您可以使用它通过套接字或HTTP与ETH节点交互。

//什么是JSON-RPC? //

先说什么是 RPC 。RPC 是 Remote Procedure Call ,字面意思是远程过程调用。可以通过WebSockets、HTTP和用于消息传递的不同环境不可知地传输数据。但是说白了就是从本地机器去执行服务器上的一个函数。所以说 RPC 指的是一类日常的操作,是个很宽泛的概念。

首先说 HTTP 请求本身也可以看做是 RPC 的一种具体形式。HTTP 请求也一样是可以从本地发一个信号到服务器,服务器上执行某个函数,然后返回一些信息给客户端。所以宽泛而言,HTTP 请求本身就是一种 RPC 的形式,二者不是同一个层面的概念。但是网上另外一种说法也很有道理,有人会拿 HTTP 请求和 RPC 作为平行概念来对比,说 HTTP 好比普通话,而 RPC 是各地方言,其实这里的 RPC 精确的来讲指的是开发者自己手写的某种 RPC 形式,所以才能跟 HTTP 形成平行关系。这句话可以理解为 HTTP 请求是如此的常见,以至于如果我们自己想开放自己机器的部分功能给任意的人用,那么使用 HTTP API 的形式是非常合适的,因为 HTTP 请求是大家都经常使用的方式。而很多时候,对于公司内部的两台机器之间,大家会按照实际需要去自定制一套 RPC ,这样做的好处是灵活高效,但是坏处就是没有通用性,所以是一种方言。

RPC 的灵活性和自定制性很强,所以学习使用 RPC 可以从具体的协议和框架入手。JSON-RPC 就是是一套 RPC 协议,使用 JSON 作为数据类型,最后一部分咱们详细聊。谷歌的 gRPC 是一个 RPC 框架,底层通信协议是基于 HTTP2.0 的。RPC 也可以不走 HTTP 协议,而直接在 TCP 协议上去做定制,去获得更大的效率和灵活性。

所以总结起来 RPC 是一个很宽泛的概念,指的是从网络上的一台机器去执行另外一台机器上的代码。HTTP 请求,可以认为是 RPC 的一种具体形式。

您可以直接访问松果审计官网,访问更多完整内容和完整调用接口。

//什么是RPC? //

RPC的编码就像它们只是本地过程调用一样。换句话说,即使子程序是本地的或远程的,程序员也会编写同样的东西的代码。本地和远程交互的编码没有明显区别,程序员不需要明确指示此类过程调用将在本地或远程运行。

//客户端-服务器交互 //

客户端-服务器交互最常用于分布式计算,是“什么是JSON-RPC”的基础之一。IPC机构可以是同步的,也可以是异步的。在使Solidity智能合同和以太坊虚拟机(EVM)时,此类同步和异步进程构成了JSON-RPC及其以太坊JSON-RPC应用程序的基础。RPC中的客户端-服务器交互——客户端是调用方,服务器是执行器——通过上述传递消息的请求响应系统实现。

//本地电话与RPC //

远程过程调用或RPC与本地过程调用有重要而必要的区别,因为它们的失败概率更高。网络问题可能导致此类通话失败。在区分远程程序调用和本地程序调用时,必须牢记这一点。因此,在为此类程序编写代码时会小心谨慎,将其限制在相对较低的子系统内。与本地通话相比,远程通话也慢得多。另一件需要注意的是,RPC要求其模型中存在一定程度的位置透明度。

//与ETH节点交互 //

软件应用程序需要连接到ETH节点,以便它们可以与以太坊区块链交互。在这种情况下,交互的定义是读取区块链数据或向以太坊网络发送交易的过程。

您需要记住的基本内容之一是JSON-RPC支持:(1)请求;2)通知

要继续,您还需要明确两个定义:(1)根据以太坊网站,以太坊客户端是“以太坊的实现,可以验证每个块中的所有事务,确保网络安全和数据的准确性。”(2)此外,节点是“运行客户端软件”。

使用JavaScript、Python、Java、Go和Rust等几种编程语言的以太坊客户端示例比比皆是。客户端可以运行三种不同类型的节点:完整节点、轻节点和存档节点。

立即点击松果审计官网,快速了解松果审计和dApp开发

//为什么使用RPC? //

当您将应用程序拆分为可以独立运行的不同部分时,它会有所帮助。使用所谓的多层架构,您可以将演示文稿与逻辑分开。对于Web应用程序,前端演示端与实际应用程序分开。通过这种方法,可以简化替代前端的使用。它还提高了安全性。通过将前端与数据本身分开,并且只能通过调用函数限制其访问,就可以降低复杂性并提高整体设计的安全性。

//简化dApp开发 //

在dApp开发中,您可以在以太坊网站上研究JSON-RPC API,以与ETH客户端交互。以太坊节点是开发和使用与主区块链交互的dApp的关键。构成dApps的后端是运行在所有节点上的智能合同。如果您喜欢以太坊网络,您可以轻松开发一个dApp,以增加生态系统不断增长的功能。

dApps的前端使用以太坊JSON-RPC API中列出的方法。具体来说,这就是他们通过您的ETH节点与网络交互的方式。有了这个,dApp的前端可以通过HTTP或WebSockets进行API调用。

松果审计通过对合约代码的审计完成了数据的积累,未来松果审计将开发革命性的中间件,允许您重新定义您的dApp和Web3开发——在处理前端时处理后端流程,甚至可以帮助您在创纪录的时间内设置区块链节点。如果您想知道如何使用松果审计,可以访问松果审计官网,阅读更多以获取完整分类。