好的,没问题。我们来聊聊 Web3.js 和 Ethers.js 这两个东西。
什么是 Web3.js 或 Ethers.js?
你可以把 Web3.js 和 Ethers.js 想象成一座“桥梁”或者一个“翻译官”。
- 桥梁的一头:是你正在使用的网站或App(比如一个去中心化交易所、一个NFT市场)。
- 桥梁的另一头:是以太坊区块链网络。
这个“翻译官”的工作,就是把你(通过网站)的意图,翻译成以太坊区块链能听懂的语言,然后把区块链返回的结果,再翻译成网站能看懂的样子展示给你。
它们俩本质上都是 JavaScript 库,也就是说,是程序员用来开发 Web3 应用的工具包。
为什么我们需要它们?
想象一下,以太坊区块链就像一个说“外星语”的超级计算机。它有自己的一套沟通规则(专业点叫 JSON-RPC
协议),非常底层和复杂。
而我们平时上网用的浏览器,只懂 JavaScript、HTML 这些“地球语”。
如果你想让一个网站直接和以太坊沟通,那简直是对牛弹琴。这时候,Web3.js 或 Ethers.js 就站了出来,说:“别急,我来当翻译!”
它们把那些复杂的“外星语”指令封装成了简单易懂的 JavaScript 函数。程序员只需要调用这些简单的函数,就能和以太坊网络互动了,大大降低了开发门槛。
它们具体能做什么?(它们的作用)
有了这座“桥”,我们就可以做很多酷炫的事情了。基本上,所有和以太坊区块链打交道的操作,都可以通过它们来完成:
-
连接到以太坊网络
- 就像把网线插到电脑上一样,这是第一步。它可以连接到公共的以太坊节点,也可以连接到你自己的钱包(比如 MetaMask)。
-
查询区块链上的信息(只读操作)
- 查余额:看看某个钱包地址里有多少以太币(ETH)或其他代币。
- 查交易:获取某一笔交易的详细信息,比如谁转给了谁,转了多少。
- 查区块信息:获取当前最新的区块号是多少,或者某个区块里包含了哪些交易。
-
发起交易(写入操作)
- 转账:从你的账户给别人发送 ETH。
- 与智能合约互动:这是最核心的功能。比如在一个 NFT 市场点击“购买”按钮,背后就是通过 Web3.js/Ethers.js 调用了 NFT 合约的
buy
函数。
-
与智能合约深度交互
- 你可以把它想象成遥控一个部署在区块链上的小程序。你可以读取这个小程序的状态(比如一个游戏里你角色的等级),也可以调用它的功能来改变状态(比如执行“升级”操作)。
-
钱包功能
- 创建新的以太坊钱包地址。
- 对消息进行签名,以证明这个操作确实是你本人发起的(这在登录很多DApp时会用到)。
Web3.js vs. Ethers.js:有什么区别?
这是个很经典的问题,就像问“肯德基和麦当劳哪个好?”一样。它们都能帮你点餐(与以太坊交互),但风格和体验上有些不同。
-
Web3.js:元老级选手,像个老大哥。
- 它是最早出现的,也是以太坊官方曾经主推的库。
- 很多老的项目和教程都是基于它来写的,生态非常庞大。
- 缺点是库的体积比较大,有些设计在现在看来稍微有点过时和复杂。
-
Ethers.js:后起之秀,更现代、更轻便。
- 它是由一位知名的以太坊开发者从头开始设计的,目标就是更小、更简单、更符合现代 JavaScript 的开发习惯。
- 它的文档非常清晰,API 设计得更直观(比如它明确区分了
Provider
- 只读连接 和Signer
- 可签名/写操作的对象,让开发者思路更清晰)。 - 体积小,对现代前端开发工具更友好。
- 目前在新的项目中,Ethers.js 的使用率越来越高,社区也非常活跃。
一个简单的比喻总结
如果把整个以太坊生态比作一个超级银行系统:
- 以太坊区块链:就是银行的总金库,记录了所有人的账本,绝对安全。
- 智能合约:是金库里的一个个保险箱,每个保险箱都有自己独特的存取规则。
- 你的钱包(MetaMask):是你的银行卡 + 密码,代表了你的身份和授权。
- Web3.js 或 Ethers.js:就是你面前的那个ATM机或者银行柜员。
你不会直接跑到金库里去操作账本,而是通过 ATM机/柜员(Web3.js/Ethers.js)来查询余额、转账、或者操作你的保险箱(智能合约)。
我应该学哪个?
如果你是刚入门的新手,我个人更推荐从 Ethers.js 开始。
理由很简单:它的设计更现代化,文档对新手更友好,体积也更小。学会它之后,你会对如何与区块链交互有一个非常清晰的认识。
当然,Web3.js 作为一个“老大哥”,保有量依然很大,很多公司的老项目还在用。所以,当你熟悉了 Ethers.js 之后,有空再去了解一下 Web3.js 的用法也是很有好处的,这样你就能“两手抓,两手都硬”了。