以太坊私有链完整搭建指南:Geth+Mist 钱包从 0 到 1

·

想亲手跑一条属于自己的以太坊?本文用 以太坊私有链 做关键字,通过 Geth + Mist 钱包 教你从创世区块写到智能合约部署,含多节点联网、私链调优等实战细节。十分钟搞定环境,半小时即可开始写合约!

环境准备

1. 客户端类别与选择

角色名称语言特点
命令行GethGo社区最大、文档最全
命令行ParityRust性能高,但已改名 OpenEthereum
图形界面MistJavaScript官方钱包,自带合约 IDE
轻钱包MetaMaskJavaScript浏览器插件,适合公链调试

我们以 Geth+Mist钱包 组合,演示 私有链 搭建全过程。

2. 下载安装

提示:全部可放在非系统盘,文件名中避免空格,减少后续脚本里路径转义的麻烦。

创建初始区块 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 目录会多出 gethkeystore

启动节点

geth --identity "TestNode1" --datadir data0 --rpc --rpcapi "eth,net,web3,personal" --rpccorsdomain "*" --networkid 29382 console

参数解释:

钱包交互

进入 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:

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;
    }
}
  1. Remix → Deploy & Run → Environment 选 Injected Web3
  2. 面板显示账户即 Mist 中的地址,确认即可。

如果提示 gas 不足,回到 Geth 里继续 miner.start() 挖出几笔空块就行。

进阶调优与常见问题

快速挖空块

开发测试阶段,可把 difficulty 改成 0x200,一个块秒出;亦可在启动参数追加:

geth --dev --datadir data0 console

--dev 模式自带 PoA,出块极快,但仅限本机测试。

keystore 与账号安全

FAQ:合约 Gas 估算失败

Q:Remix 估算 gas 为 0,合约部署不了?
A:原因常是私链 gasLimit 过小,重新启动时加大:

"gasLimit": "0x1ffffffff"

Q:Mist 提示网络不同步?
A:确认节点仍在挖矿或 --dev 模式已启用,网络标识一致。

结尾与下一步

完成上述 7 个步骤,你就拥有了一条 以太坊私有链 + 2 个全节点 + 智能合约部署通道。
下一步,可以尝试把链迁到两台 VPS,再使用 PoA Clique 共识做更高级的多机构网络,或把业务逻辑迁到 Layer2 Rollup 上以节省资源。

如果你想把刚挖的测试 ETH 兑换成主流资产,👉 安全入口为你准备好了,点击零时差体验!