核心关键词:Geth、以太坊、私有链、挖矿、节点互联、转账、创世区块
为什么选 Geth?
Geth 是以太坊官方 Golang 实现,轻便、文档齐全,能快速启动私有链,既可用于智能合约开发,也能低成本模拟真实挖矿环境。下面就带你从零开始:在两台主机上部署一条以太坊私有链,完成挖矿与转账。
第一步:获取并安装 Geth
访问官网安装页,选择 Windows / macOS / Linux 对应版本。安装完成后,终端输入:
geth version正常输出版本号即安装成功。Windows 默认会多出以下可执行:
- geth.exe
- clef.exe(独立钱包)
- evm.exe(字节码调试)
- puppeth.exe(创世向导)
👉 不想一步步踩坑?这份 Geth 主网同步避坑锦囊专治卡顿
第二步:准备创世区块
创建项目目录
mkdir privatechain && cd privatechain编写 genesis.json
{
"config": {
"chainId": 10086,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "80000",
"alloc": {}
}chainId自定义 链 ID,与主网隔离difficulty越低,出块越快,适合演示alloc先不留预挖余额,公平起点
第三步:初始化节点
Host1(192.168.0.100)
geth init --datadir ./data genesis.jsonHost2(192.168.0.180)
重复同条命令。
第四步:启动私有链
通用启动命令
geth \
--networkid 191 \
--datadir ./data \
--nodiscover \
--http --http.addr 0.0.0.0 --http.port 8545 \
--http.api personal,eth,net,web3 \
--allow-insecure-unlock \
console参数速记:
--networkid与创世文件内chainId配合决定网络身份--nodiscover关闭自动发现,手动互加 节点--http开启 JSON-RPC,方便脚本或前端调用--allow-insecure-unlock本地测试权限更宽松
第五步:创建钱包账户
Host1 控制台内:
> personal.newAccount("123")
"0xf1d65f66658a3dfa86b689ce084fd3234fc3b691"Host2 控制台内:
> personal.newAccount("456")
"0xf228360fbf872e4aca7f930a60b18c6f1f6ca19e"记下各自钱包地址,随后会用 挖矿奖励 填充余额。
第六步:节点互联(点对点)
获取 Host2 节点地址
Host2 启动日志会看到:
self=enode://[email protected]:30303?discport=0将 127.0.0.1 改为 Host2 真实 IP 192.168.0.180 得到最终 enode URI。
在 Host1 手动添加对端
> admin.addPeer("enode://[email protected]:30303?discport=0")几分钟后查看:
> admin.peers出现对方信息即互联成功。
第七步:开始挖矿(模拟 PoW)
解锁账户
> sender = eth.accounts[0]
> personal.unlockAccount(sender, "123")启动单机矿工
> miner.start(1)由于 difficulty 设为 1,数秒即可看见:
INFO [xx-xx|xx:xx:xx.xxx] 🔨 mined potential block ...停止挖矿:
> miner.stop()查询余额:
> eth.getBalance(sender)
34000000000000000000得到 34 ETH 区块奖励,已记入主网同步的 区块高度:
> eth.blockNumber
17第八步:链上转账
设置双方变量
Host1:
receiver = "0xf228360fbf872e4aca7f930a60b18c6f1f6ca19e"
amount = web3.toWei(1, "ether")提交交易
> eth.sendTransaction({from: sender, to: receiver, value: amount})若提示解锁,再次执行:
> personal.unlockAccount(sender, "123", 300) # 300 秒免解锁打包交易
> eth.pendingTransactions
> miner.start(1)
// 等一个区块
> miner.stop()回到 Host2:
> eth.getBalance(receiver)
1000000000000000000转账完成!
FAQ 常见疑问
Q1: 机器没有显卡,能挖矿吗?
A1: 私有链 ethash 已降低难度,普通 CPU 即可出块,仅做学习用途,切勿与主网算力对比。
Q2: generating DAG 卡住无法继续?
A2: DAG 是 ethash 的显存文件,难度为 1 时几乎瞬间完成;如 stuck,检查 --datadir 指向磁盘空间是否充足。
Q3: 如何重置整个私有链?
A3: 删除 data 目录下的 geth 与 keystore 文件夹,重新 geth init 即可。
Q4: JSON-RPC 无法外部访问?
A4: 确认 --http.addr 0.0.0.0 且云服务器安全组放行 8545 端口。
Q5: 为什么添加 peer 后无同步?
A5: 两机需 networkid、genesis.json 完全相同,且防火墙开放 30303 端口。
总结与下一步
通过 Geth,我们已构建一条完整的 以太坊私有链 并完成 挖矿 与 转账。
下一步可尝试:
- 引入 Clef 做 独立签名钱包,提高安全
- 在链上部署 智能合约,体验真正的 DApp 逻辑
- 用 Puppeth 一键生成多节点,模拟真实 以太坊网络拓扑
祝编码愉快,链上无忧!