Geth 以太坊私有链搭建与挖矿全流程实战

·

核心关键词:Geth、以太坊、私有链、挖矿、节点互联、转账、创世区块


为什么选 Geth?

Geth 是以太坊官方 Golang 实现,轻便、文档齐全,能快速启动私有链,既可用于智能合约开发,也能低成本模拟真实挖矿环境。下面就带你从零开始:在两台主机上部署一条以太坊私有链,完成挖矿与转账。


第一步:获取并安装 Geth

访问官网安装页,选择 Windows / macOS / Linux 对应版本。安装完成后,终端输入:

geth version

正常输出版本号即安装成功。Windows 默认会多出以下可执行:

👉 不想一步步踩坑?这份 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": {}
}

第三步:初始化节点

Host1(192.168.0.100)

geth init --datadir ./data genesis.json

Host2(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

参数速记:


第五步:创建钱包账户

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

出现对方信息即互联成功。

👉 解锁以太坊节点全部启动参数,用 10 分钟读懂常见陷阱


第七步:开始挖矿(模拟 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 目录下的 gethkeystore 文件夹,重新 geth init 即可。

Q4: JSON-RPC 无法外部访问?
A4: 确认 --http.addr 0.0.0.0 且云服务器安全组放行 8545 端口。

Q5: 为什么添加 peer 后无同步?
A5: 两机需 networkidgenesis.json 完全相同,且防火墙开放 30303 端口。


总结与下一步

通过 Geth,我们已构建一条完整的 以太坊私有链 并完成 挖矿转账
下一步可尝试:

祝编码愉快,链上无忧!