区块链/Web3岗位面试题更新 2026-08-05

在 ethers.js 中,Provider 和 Signer 分别扮演什么角色?二者在功能和用途上有何不同?

区块链工程师技术原理方案权衡ethers.js

考察说明

考查对 ethers.js 核心抽象的理解,以及区分只读操作与账户操作的能力。

回答思路

  1. 【回答框架 1】Provider 是用于只读操作的连接抽象,负责与区块链网络交互,如查询区块、交易、余额和合约状态。Signer 则代表一个能够签署交易的账户,可以发送交易并持有私钥。
  2. 【回答框架 2】Provider 不管理密钥,只读写区块链数据;Signer 具备签名能力,例如发起转账、调用合约写操作。常用的 Provider 包括 JsonRpcProvider 和 InfuraProvider,Signer 常见于 Wallet 或连接钱包的实例。
  3. 【回答框架 3】在实际开发中,获取只读数据通常使用 Provider,而需要写入数据时必须依赖 Signer,例如通过 Wallet 或钱包插件获取签名者。Signer 可以关联 Provider 以广播交易。
  4. 【回答框架 4】安全性方面,Provider 不涉及私钥,风险较低;Signer 必须保护私钥,避免泄露。在构建去中心化应用时,通常会先通过 Provider 读取状态,再在用户操作时切换至 Signer。
  5. 【关键点 1】Provider 用于查询区块链状态,Signer 用于签署并广播交易。
  6. 【关键点 2】Signer 持有私钥,Provider 不持有私钥。
  7. 【关键点 3】Signer 可以关联 Provider 执行交易,但 Provider 不能替代 Signer。
  8. 【关键点 4】读取合约状态使用 Provider,写入合约使用 Signer。
  9. 【易错点 1】误以为 Signer 只能通过 Wallet 创建,其实可通过浏览器钱包获取。
  10. 【易错点 2】忽略 Signer 与 Provider 的关联,直接调用签名方法可能因无网络而失败。
  11. 【易错点 3】将 Provider 用于写操作,导致只能构建交易但无法广播。