手把手教你搭建以太坊私有链、挖矿与转账全流程

·

关键词:私有链、以太坊挖矿、创世区块、geth、钱包、交易、Gas、智能合约测试链

本文用一句通俗易懂的话概括:把以太坊完整复制到本地,让你随意“印钱”和“转账”而不花一分钱。 跟着操作,10 分钟即可拥有一条属于自己的私有链,并用它完成挖矿、账户管理与链上转账等实战演练。


一、第一步:编写创世区块配置

私有链的起点是一张“出生证明”——创世区块(genesis.json)。把它想象成新世界的宪法,节点必须先认同这部宪法才能加入。创建文件 genesis.json,内容如下:

{
  "config": {
    "chainID": 72,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "difficulty": "0x4000",
  "gasLimit": "0xffffffff",
  "nonce": "0x0000000000000000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa"
}

chainID:私有链的身份证明,请选用 ≥5 的随机数,避免与主网/测试网冲突。
difficulty:越低越易挖,测试环境建议 0x4000。
gasLimit:区块可容纳的最大 Gas,私有链可直接拉满。


二、初始化链数据目录

执行命令,把创世区块写进本地数据库:

geth --datadir ./private_chain_data init genesis.json

看到日志含有 Successfully wrote genesis state 字样即初始化成功。


三、启动节点并进入控制台

geth --datadir ./private_chain_data \
     --networkid 88 \
     --nodiscover \
     --http \
     --http.api eth,web3,personal,miner \
     console

参数释义


四、创建账号与解锁钱包

进入控制台后,依次输入:

> personal.newAccount("你的密码")
> personal.listAccounts   // 验证已创建成功
> eth.getBalance(eth.coinbase)  // 初始为 0

首次转账前,务必先解锁:

> personal.unlockAccount(eth.coinbase, "你的密码")

提示:私有链可以简单地把密码留空“偷懒”,但千万别在主网这么干。


五、启动挖矿,体验“印钞”

> miner.start(1)   // 参数 1 代表单线程,减少 CPU 占用

等待 DAG 生成至 100%,你就会看到 Successfully sealed new block 字样的刷屏。此时再用:

> eth.getBalance(eth.coinbase)

余额已非零,以太币到手 ✅

👉 开启你的私有链挖矿之旅,第一手体验完整区块链世界!


六、链上转账三连击:发交易 → 挖矿 → 新余额

  1. 创建收款地址

    > personal.newAccount("密码2")
    const account2 = "刚刚返回的地址"
  2. 发交易

    > eth.sendTransaction({
        from: eth.coinbase,
        to: account2,
        value: web3.toWei(10, "ether")
      })
  3. 挖矿确认
    交易提交后处于 pending,需要矿工打包:

    > miner.start(1)

    挖出新区块后,再通过 eth.getBalance(account2) 即可看到 10 个 ether 到账。


七、Gas 的坑:余额看起来够,但却提示不足?

典型报错:insufficient funds for gas * price + value
在私有链上,可把 GasPrice 调到 1 Wei,足以满足测试需求:

> eth.sendTransaction({
    from: account2,
    to: eth.coinbase,
    value: web3.toWei(0.1, "ether"),
    gasPrice: 1
})

八、常见疑问 FAQ

Q1:我为私有链写了 10 万个 ether,会影响主网吗?
A:完全不影响。私有链是独立宇宙,在外网挖矿 10000 年也挖不出主网的一枚 ether。

Q2:挖了一段时间后节点崩溃,数据会不会丢?
A:默认数据目录 ./private_chain_data/geth/chaindata 已持久化,只要你备份这个目录即可。

Q3:想多人一起玩这条链,如何让同伴连接进来?
A:去掉 --nodiscover,改用 --bootnodes 指定你的机器 enode://...@[IP]:30303 即可组建小型联盟链。

Q4:控制台里如何查看当前区块高度?
A:直接 eth.blockNumber,或 eth.syncing 查看同步状态(私有链通常瞬间同步完成)。

Q5:如何重置链并完全重新开始?
A:删除先前使用的 --datadir 目录,重新执行一次 init 即可。

Q6:可以在私有链上部署智能合约吗?
A:当然可以。步骤与公网一致,只要你打开 http 服务并解锁部署账户即可用 Remix、Truffle 等工具调试。

👉 别让试错成本拖慢创新脚步,立即搭建属于你的开发链!


九、结账

至此، 一条本地私有链完整上线。你可以:

实践是最好的老师。拿起键盘,开始你的区块链探险之旅吧!