以太坊,作为全球第二大加密货币和最具活力的去中心化应用(DApp)平台,其底层区块链技术的搭建与理解,是每一位区块链开发者、架构师乃至技术爱好者的必修课,本文将以“以太坊区块链搭建6”为关键词,为您呈现一个从零开始、循序渐进的完整指南,助您深入理解以太坊的构建、部署与运行全貌。

在云服务一键部署的今天,为何我们还要费心搭建一个本地的以太坊节点?答案在于“理解”与“控制”。
本指南将分为六个核心步骤,助您完成以太坊区块链的搭建。
在开始之前,请确保您的开发环境已准备就绪,我们推荐使用 Linux 或 macOS 系统,Windows 用户可通过 WSL2 获得良好的体验。
安装 Go 语言环境: 以太坊客户端(如Geth)主要用Go语言编写,请安装Go 1.18或更高版本。
# 下载并安装Go (以Linux为例) wget https://go.dev/dl/go1.19.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz # 配置环境变量 echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
安装必要的依赖库:
# Ubuntu/Debian sudo apt-get update sudo apt-get install -y build-essential git # macOS (使用Homebrew) brew install git
安装代码版本控制工具 Git:
# 通常在安装依赖时已一并安装 git --version
以太坊网络由成千上万的节点构成,这些节点运行着不同的客户端软件,我们选择最流行、功能最全面的 Geth(Go-Ethereum) 作为示例。
克隆Geth源代码:

git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum
编译Geth:
make geth
编译成功后,您会在 go-ethereum/build/bin 目录下找到 geth 可执行文件,您也可以将其移动到系统PATH中方便使用。
与比特币不同,以太坊允许您创建自己的私有链,这需要定义一个“创世区块”(Genesis Block),它包含了您私有链的初始规则。
创建创世配置文件 genesis.json: 在 go-ethereum 目录下创建一个 my_private_chain 文件夹,并在其中创建 genesis.json 文件。
{
"config": {
"chainId": 666, // 私有链ID,必须与主网、测试网不同
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"mergeNetsplitBlock": 0,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true,
"ethash": {}
},
"alloc": {
// "0xYourAddressHere": { "balance": "100000000000000000000" } // 可预分配地址
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x400",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
chainId:这是您私有链的唯一标识符,请务必设置一个独一无二的数字。alloc:用于在创世区块中预分配资金给某些地址,可选。使用Geth初始化:
# 回到go-ethereum根目录 cd .. # 初始化 ./build/bin/geth --datadir ./my_private_chain/data init ./my_private_chain/genesis.json
执行后,Geth会在 ./my_private_chain/data 目录下创建所有必要的区块链数据文件,包括创世区块。
万事俱备,可以启动您的第一个以太坊节点了。
--datadir:指定数据存储目录。--networkid:指定网络ID,必须与 genesis.json 中的 chainId 一致。--console:启动后自动进入JavaScript交互式控制台。启动后,您会看到节点开始同步区块,因为是新创的私有链,它将立即完成同步,并开始等待新的交易和区块。

在控制台中,您可以输入命令与节点交互:
eth.blockNumber:查看当前区块号,应为0。eth.accounts:查看节点中的账户列表,初始为空。personal.newAccount("your_password"):创建一个新账户,请记住密码。没有挖矿的区块链是不完整的,让我们让节点开始工作。
解锁账户: 挖矿需要使用一个账户作为“矿工地址”来接收奖励,首先创建一个账户,然后解锁它。
// 在geth控制台中执行
personal.newAccount("your_mining_password")
// 记下返回的地址,"0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
personal.unlockAccount(eth.accounts[0], "your_mining_password") 启动挖矿:
miner.start(1) // 1代表使用1个CPU核心进行挖矿
您会看到命令行开始输出哈希率,节点正在尝试寻找符合难度要求的区块。
查看挖矿结果: 稍等片刻,您会发现 eth.blockNumber 开始增加,您可以在 eth.getBlock(eth.blockNumber) 的结果中,看到 miner 字段正是您解锁的账户地址,并且该账户的余额 eth.getBalance(eth.accounts[0]) 也在不断增长。
停止挖矿:
miner.stop()
一个能挖矿的链还不够,我们需要在上面部署和运行智能合约。
编写一个简单的智能合约(Solidity): 创建一个 SimpleStorage.sol 文件:
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 public storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
} 编译合约: 使用在线编译器(如 Remix IDE)或本地 solc 编译工具,将 .sol 文件编译