本文介绍了JSON-RPC协议在区块链开发中的重要性。JSON-RPC是一种远程过程调用协议,通过JSON对象发送请求和接收响应,用于dApp与区块链节点之间的通信,实现了查询数据和发送交易等功能。虽然JSON-RPC并非Web3独有,但它已成为Web3技术栈的核心组成部分。
当我第一次开始探索区块链开发时,我不断地遇到一个叫做 JSON-RPC 的东西。起初,它听起来像是另一个流行词,也许是一些小众的数据格式或者是某种我其实不必关心的底层细节。
但一旦我开始与以太坊节点交互,并使用像 web3.js
或 ethers.js
这样的工具,一切都变得清晰起来:JSON-RPC 无处不在。它是 dApps 与区块链之间无形的桥梁。所以我深入研究了一下,以下是我从一个开发者到另一个开发者所学到的。
JSON-RPC 代表 JavaScript Object Notation — Remote Procedure Call(JavaScript 对象表示法 - 远程过程调用)。它是一种协议,允许你在远程机器上调用函数,就像说:“嘿服务器,运行这个方法并给我结果。”
其结构非常简单。你发送一个 JSON 对象,其中包含你想调用的方法及其参数。服务器在另一个 JSON 对象中发回结果。就这些。没有标头,没有状态代码,没有 URL。只有函数名和数据。
所以,如果我想获取最新的以太坊区块号,我会发送这样的内容:
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}
然后我会得到一个 JSON 响应包裹着的区块号。
这部分最初让我感到困惑。JSON-RPC 通常通过 HTTP 传输,所以感觉有点像常规的 API,但其实不一样。
HTTP API(你知道的,典型的 REST API,带有 GET/POST 和像 /users/123
这样的 URL)是围绕 资源 构建的。你获取它们、更新它们、删除它们。而 JSON-RPC 则完全关于 动作。你不是在请求一个“资源”;你是在请求服务器做某事,比如运行一个函数并给你结果。
没有 endpoint。只有一个访问点,其他一切都由 JSON body 中的方法名和参数定义。
在以太坊和大多数其他区块链的世界里,JSON-RPC 是与节点交互的标准方式。无论你是查询区块链数据还是发送交易,你几乎肯定在幕后使用 JSON-RPC。
如果你使用过 MetaMask、Infura、Alchemy 或任何其他钱包或 RPC 服务提供商,你就使用过 JSON-RPC。web3.js
和 ethers.js
这样的库就是用它来与区块链通信的。
因此,当你的 dApp 获取钱包余额或调用智能合约函数时,它并没有做什么花哨的事情。它只是发送一个带有方法 eth_getBalance
或 eth_call
的 JSON-RPC 请求,并等待响应。
这一个很有意思。
从技术上讲,JSON-RPC 并不是什么新鲜事物,也不是 Web3 独有的。它早在 Web2 的早期就存在了。它是一种通用的远程调用协议,如果你愿意,可以用它来控制智能烤面包机。
但在区块链的背景下,JSON-RPC 绝对是 Web3 堆栈的核心部分。每当 dApp 需要与去中心化节点通信以读取链的状态或向其写入数据时,JSON-RPC 都是实现这一目的的工具。
因此,即使它不是在 Web3 时代诞生的,但现在它已经深深地融入了 Web3 的运作方式中。
如果你像我一样刚刚开始区块链开发,JSON-RPC 最初可能看起来很晦涩。它没有引人注目的博客文章或 Twitter 帖子。但它却在做着让你的应用程序发挥作用的苦差事。
它就像管道工程,并不光鲜亮丽,但绝对必不可少。
了解它的工作原理让我对我们所有人使用的区块链工具之下的各层有了更好的理解。现在,当我看到钱包余额或交易收据时,我几乎可以看到 JSON-RPC 调用在后台嗡嗡作响,默默地让这一切成为可能。
感谢阅读!如果这有助于为你揭开 Web3 后端的一些神秘面纱,请随意鼓掌、分享或留下你的想法,随时欢迎进行良好的开发交流。
- 原文链接: coinsbench.com/behind-th...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!