想亲手跑一条属于自己的以太坊?本文用 以太坊私有链 做关键字,通过 Geth + Mist 钱包 教你从创世区块写到智能合约部署,含多节点联网、私链调优等实战细节。十分钟搞定环境,半小时即可开始写合约!
环境准备
1. 客户端类别与选择
| 角色 | 名称 | 语言 | 特点 |
|---|---|---|---|
| 命令行 | Geth | Go | 社区最大、文档最全 |
| 命令行 | Parity | Rust | 性能高,但已改名 OpenEthereum |
| 图形界面 | Mist | JavaScript | 官方钱包,自带合约 IDE |
| 轻钱包 | MetaMask | JavaScript | 浏览器插件,适合公链调试 |
我们以 Geth+Mist钱包 组合,演示 私有链 搭建全过程。
2. 下载安装
- Geth
官网直接下载 zip,免安装,解压即可。 - Mist
GitHub 的 release 页同样提供 zip,解压同步使用。
提示:全部可放在非系统盘,文件名中避免空格,减少后续脚本里路径转义的麻烦。
创建初始区块 genesis.json
把下列内容保存到项目根目录,文件名为 genesis.json。其中 chainId 是私有链标识,别与主网冲突;difficulty 设低一些方便挖矿。
{
"config": {
"chainId": 101,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {
"0x1234567890123456789012345678901234567890": {
"balance": "100000000000000000000"
}
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x200",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}FAQ:为什么写 0x123…789 地址?
A:这是演示用预留账户,部署合约、转账测试超方便,生产环境建议删除 alloc 保持公平。
初始化首个节点
在命令行执行:
geth --datadir data0 init genesis.json看到 Successfully wrote genesis state 即成功。data0 目录会多出 geth与keystore。
启动节点
geth --identity "TestNode1" --datadir data0 --rpc --rpcapi "eth,net,web3,personal" --rpccorsdomain "*" --networkid 29382 console参数解释:
--networkid 29382:自定义私有链网络号,多节点必须一致。--rpcaddr 127.0.0.1/--rpcport 8545:本地 HTTP-RPC 端口,便于 Mist 与 Remix 连接。
钱包交互
进入 Geth 交互式 console,常见操作如下:
personal.newAccount("123456") // 新建账户
eth.accounts // 查看地址列表
personal.unlockAccount(eth.accounts[0], "123456") // 解锁
eth.getBalance(eth.accounts[0]) // 查余额(单位:Wei)
miner.start(1) // 单线程挖矿想立即体验无需等待挖矿?5 秒 免费领取测试币 让你的合约跑起来!👉 完全零门槛的 ETH 水龙头,不容错过!
FAQ:单机多节点组网
Q1:如何让两台机器加入同一私有链?
A:
- 节点 1 先启动后,记下
admin.nodeInfo.enode。 - 节点 2 启动带相同 networkid 后,
admin.addPeer("enode://...")即可。
Q2:提示端口占用?
A:同一机多节点,更改 --port 与 --rpcport 避免冲突。
启动 Mist 钱包
单节点打开
直接双击 Mist.exe,首次会提示选择网络,选 Private-net。
多节点图形界面
节点 1 默认走动,节点 2 需追加 RPC:
mist.exe --rpc \\.\pipe\data1\geth\geth.ipc避坑:不要加 http 头,否则会误触发只读模式,无法转账。
启动后右上角显示 PRIVATE-NET 字样,即为私链模式。
智能合约部署
极简 ERC20-Like 代币示例
部署前,先在 Geth console 解锁主账户:
personal.unlockAccount(eth.accounts[0], "123456")Remix 中编译以下合约:
pragma solidity ^0.8.0;
contract MyToken {
mapping(address => uint) public balanceOf;
constructor() {
balanceOf[msg.sender] = 1000000 * 10 ** 18;
}
function transfer(address to, uint amount) public returns (bool) {
require(balanceOf[msg.sender] >= amount);
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
return true;
}
function getBalance(address addr) public view returns (uint) {
return addr.balance;
}
}- Remix → Deploy & Run → Environment 选 Injected Web3。
- 面板显示账户即 Mist 中的地址,确认即可。
如果提示 gas 不足,回到 Geth 里继续 miner.start() 挖出几笔空块就行。
进阶调优与常见问题
快速挖空块
开发测试阶段,可把 difficulty 改成 0x200,一个块秒出;亦可在启动参数追加:
geth --dev --datadir data0 console--dev 模式自带 PoA,出块极快,但仅限本机测试。
keystore 与账号安全
- keystore 目录保存的是加密私钥,定期备份即可,切勿明文传播。
- mist 每次启动都会提示输入密码,默认缓存 20 分钟,可在 Mist 设置调整。
FAQ:合约 Gas 估算失败
Q:Remix 估算 gas 为 0,合约部署不了?
A:原因常是私链 gasLimit 过小,重新启动时加大:
"gasLimit": "0x1ffffffff"Q:Mist 提示网络不同步?
A:确认节点仍在挖矿或 --dev 模式已启用,网络标识一致。
结尾与下一步
完成上述 7 个步骤,你就拥有了一条 以太坊私有链 + 2 个全节点 + 智能合约部署通道。
下一步,可以尝试把链迁到两台 VPS,再使用 PoA Clique 共识做更高级的多机构网络,或把业务逻辑迁到 Layer2 Rollup 上以节省资源。
如果你想把刚挖的测试 ETH 兑换成主流资产,👉 安全入口为你准备好了,点击零时差体验!