用 QuickNode RPC 快速搭建属于自己的以太坊钱包

·

无论你是一名 Web3 初学者,还是想为 DApp 补充一个小巧的钱包模块,本文都将手把手演示如何用 JavaScript、QuickNode RPC 与常用开源库,在 30 分钟内打造出一款可生成地址、查余额并签名的轻量级以太坊钱包。


01 准备阶段

核心关键词:以太坊钱包QuickNode RPCWeb3.jsethereumjs-wallet、地址生成、私钥签名。


02 3 分钟了解以太坊

以太坊网络由遍布全球的节点共同维护,遵循同一套 以太坊协议(Ethereum Protocol)。它的最大魅力在于去中心化:开发者无需向中介申请牌照,就能发行资产、部署合约、开发应用。一位用户随时都能用 以太坊钱包 创建账户,掌控自己的资金与身份。


03 JavaScript 能为钱包做什么?


04 项目结构与依赖安装

  1. 新建文件夹并初始化

    mkdir my-eth-wallet
    cd my-eth-wallet
    npm init -y
  2. 安装核心库

    npm install ethereumjs-wallet web3

    仅需两个依赖:

  3. ethereumjs-wallet:负责 私钥 -> 地址 的本地运算。
  4. web3:用于同 QuickNode RPC 通信。

05 核心代码:wallet.js 详解

文件:wallet.js

const Wallet  = require('ethereumjs-wallet').default;
const Web3    = require('web3');

// 替换为你在 QuickNode 中获取的 HTTP URL
const web3 = new Web3('https://YOUR_RPC_ENDPOINT_HERE');

/* 1. 生成地址 + 私钥 */
function generateWallet() {
  const wallet = Wallet.generate();
  return {
    address: wallet.getAddressString(),
    privateKey: wallet.getPrivateKeyString()
  };
}

/* 2. 查询余额(单位:ETH) */
async function checkBalance(address) {
  try {
    const wei = await web3.eth.getBalance(address);
    return web3.utils.fromWei(wei, 'ether');
  } catch (e) {
    console.error(e);
    return 'Error';
  }
}

/* 3. 离线签名 */
async function signTransaction(privateKey, txData) {
  try {
    const wallet   = Wallet.fromPrivateKey(Buffer.from(privateKey.slice(2), 'hex'));
    const signed   = wallet.signTransaction(txData); // VRS 拼接
    return signed.serialize().toString('hex');
  } catch (e) {
    console.error(e);
    return null;
  }
}

module.exports = { generateWallet, checkBalance, signTransaction };

关键关键词:web3私钥地址生成余额查询签名交易 贯穿始终,SEO 友好且方便读者快速定位。


06 用户交互:极简界面

目录结构:

my-eth-wallet/
 ├─ wallet.js
 ├─ index.html
 ├─ app.js

6.1 index.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>轻量级以太坊钱包</title>
</head>
<body>
  <h1>My Mini Wallet</h1>

  <button id="generateWallet">生成新地址</button>
  <p id="walletInfo"></p>

  <button id="checkBalance">查询余额</button>
  <p id="balanceInfo"></p>

  <button id="signTx">签名测试交易</button>
  <p id="txInfo"></p>

  <script src="app.js"></script>
</body>
</html>

6.2 app.js

const { generateWallet, checkBalance, signTransaction } = require('./wallet.js');

document.getElementById('generateWallet').onclick = () => {
  const { address, privateKey } = generateWallet();
  document.getElementById('walletInfo').innerHTML =
    `<strong>地址</strong>: ${address}<br><strong>私钥</strong>: ${privateKey}`;
};

document.getElementById('checkBalance').onclick = async () => {
  const address = prompt('输入要查询的地址');
  if (!address) return;
  const balance = await checkBalance(address);
  document.getElementById('balanceInfo').textContent = `余额:${balance} ETH`;
};

document.getElementById('signTx').onclick = async () => {
  const key = prompt('输入私钥');
  if (!key) return;

  const tx = {
    to: '0x742d35Cc6f41C00A35b33C2F5885a9C5CF2f3Fc5', // 测试收款地址
    value: web3.utils.toWei('0.001', 'ether'),          // 0.001 ETH
    gas: 21000,
    gasPrice: 20000000000,
    nonce: await web3.eth.getTransactionCount('YOUR_ADDRESS')
  };

  const raw = await signTransaction(key, tx);
  document.getElementById('txInfo').textContent =
    raw ? `已签名交易:${raw}` : '签名失败';
};

07 4 步亲手验证钱包

  1. 本地 HTTP 服务
    使用 npx serve . 或 VS Code 的 Live Server 均可。
  2. 打开浏览器访问 index.html。
  3. 先用 Goerli 测试网 faucet 领币,别怕花钱。
  4. 先在测试网跑通生成、查询与签名,再考虑主网。

👉 立即领取免费 Goerli ETH,立刻体验完整流程。


08 FAQ:新手 5 大高频疑问

Q1:我的浏览器为什么报 require not defined
A:浏览器原生不支持 require。请在 webpack、Vite 或 Rollup 环境中打包,或改用 ES Module 版本。

Q2:私钥到底该放在哪里最安全?
A:浏览器示例仅供体验。生产环境请使用 硬件钱包加密本地存储。切忌明文放在前端源码。

Q3:怎样把已签名的交易广播到链上?
A:调用 web3.eth.sendSignedTransaction(rawTx) 即可。QuickNode RPC 会把交易推送到全网节点。

Q4:Gas Price 调多少合适?
A:可在 Etherscan 实时 Gas 追踪 查看平均值,再乘以 1.1 作为安全冗余。

Q5:能否一次创建多地址,做 HD 钱包?
A:可替换为 ethereumjs-wallet/hdkey 配合 BIP-39 助记词,一行代码即可批量派生。


09 止于此,行不止于此

至此,你已拥有一套能在本地运行、连接 QuickNode RPC 并支持 地址生成 - 余额查询 - 签名交易 的最小可用钱包原型。接下来,你可以:

👉 查看更多高阶扩展案例,继续升级你的以太坊钱包。

祝你开发顺利,资产管理因你更自由。