本文围绕 以太坊钱包、私有链、Geth、MetaMask、创世块、智能合约、测试环境 七大关键词,手把手为你呈现从 0 到 1 的完整链路部署。阅读约需 10 分钟,一节一个动作点,随时断点续传。
环境准备:安装 Geth 与配置 PATH
- 访问官方 Geth 下载页,Windows 镜像选
stable-x.x.x-windows-amd64.zip(建议使用包含Tools字样的整合包)。 - 解压到
D:\Ethereum\geth,将D:\Ethereum\geth加入系统变量 Path。 - 打开
cmd输入:
geth version若输出版本号即成功。
创建账户、定义创世块并启动本地私有链
1. 文件夹与账户规划
DevChain/
├─ keystore/ # 存放账户 keystore 文件
├─ genesis.json # 创世块配置
├─ password.txt # 账户密码
└─ start.cmd # 一键启动脚本注意:路径建议纯英文,避免中文或空格。
2. 新建账户
在 DevChain 目录打开 PowerShell 或 cmd,执行:
geth account new --keystore keystore输入长度 ≥10 位的复杂密码,记录返回地址。
接下来打印创世模板:
geth --dev dumpgenesis > genesis.json编辑 genesis.json 关键字段:
coinbase替换为上一步账户地址。alloc节点为用户预先充值 10 ETH 方便后续智能合约测试:
"alloc": {
"<你的账户地址(不带0x前缀)>": {
"balance": "10000000000000000000"
}
}3. 初始化链数据
geth --datadir . init genesis.json初始化完毕后,链数据目录 .ethereum 会出现在 DevChain 下。
4. 编写一键启动脚本
start.cmd 内容:
geth --datadir . ^
--dev --dev.period 2 ^
--http --http.api eth,web3,net ^
--http.corsdomain "*" ^
--http.port 8888 ^
--password password.txt双击即可在本地 8888 端口启动节点。
FAQ(一):如何查看钱包余额?
Q:节点运行后,怎样验证账户金额已生效?
A:保持 start.cmd 运行状态,另开终端输入:
geth attach \\.\pipe\geth.ipceth.getBalance(eth.accounts[0])
// 返回 10 的以太:10e18 wei解锁私钥:Node.js 方法示例
MetaMask 需要私钥导入口袋钱包。
- 安装 Node.js(LTS 版本即可)。
- 在 DevChain 目录执行:
npm init -y
npm i keythereum- 创建
export-private-key.js:
const keyth = require('keythereum');
const account = '<你的账户地址(带0x)>';
const keystoreDir = 'keystore';
const keyObj = keyth.importFromFile(account, keystoreDir);
const privateKey = keyth.recover('<账户密码>', keyObj);
console.log('Private Key: 0x' + privateKey.toString('hex'));运行 node export-private-key.js 得到 64 位十六进制私钥,复制保存到离线加密笔记。
MetaMask 钱包配置与测试链切换
- Chrome/Edge 应用商店搜索并安装 MetaMask。
创建新钱包 → 助记词 → 密码,之后把网络切到 “本地主机 8888”:
- RPC URL:
http://localhost:8888 - 链 ID:
1337(--dev模式默认值) - 符号:ETH
- 区块浏览器:留空即可
- RPC URL:
- 导入私钥 → Account Details → Import Account,粘贴刚才生成的 Key。此时余额应显示 10 ETH,本地私有链互联成功。
Remix IDE 与合约部署
确保节点持续运行:
REMIX url: https://remix.ethereum.org首次连接:
- ENVIRONMENT → Injected Web3 → MetaMask 会弹窗请求授权。
- 选用当前账户,确认连接。
- Solidity 输入示例:
pragma solidity ^0.8.17;
contract HelloWorld {
string public msg = "Hello Private Chain!";
}编译 → 部署 → MetaMask 弹交易 → 成功看到 msg 返回结果。
👉 探索更多 Solidity 开发连招,让合约跑在专属链上
FAQ(二):常见卡点排查
| 问题场景 | 快速定位 | 典型解决 |
|---|---|---|
bind: Only one usage... | 端口已被占用 | 改脚本 --http.port 8889 |
account unlock {keystore...} 失败 | 路径含空格、password.txt编码 | 确认纯 ASCII 无 BOM |
Remix 提示 Provider not set or invalid | MetaMask 网络列表未选中 localhost 8888 | 手动切换网络后刷新 Remix |
进阶玩法:把私有链调成全节点模式
若想与他人共享本地链:
- 节点发现:开启
--nodiscover置 false,设置--port 30303固定端口。 - 静态节点文件:编辑
static-nodes.json,填伙伴机器 IP 与端口。 - Gas Limit 调优:在
genesis.json中提升gasLimit便于部署大合约。
团队成员只要同步 genesis.json 与静态节点列表,就能立刻加入同一套私有链。
项目复盘:一张脑图回顾流程
- 安装 Geth → 创建账户 → 编写创世块 → 初始化链 → 编写启动脚本 → 启动节点
↓ - Node.js 导出私钥 → MetaMask 设置网络 → 导入私钥 → Remix 部署合约
↓ - 私有链联调、调试日志、性能监控
结 语
至此,你已经能独立完成 以太坊钱包 创建、私有链 启动到智能合约 部署 的完整闭环。无论是企业内部 DApp 测试,还是学生课程作业,随开随用,随关随停。将这套模板保存到 GitHub,下次只需一句 npm run dev 就能复活整链。
如有新需求——比如兼容 EIP-1559、导入图形化浏览器,或接入审计工具——欢迎在实操中继续迭代。祝开发愉快!