区块链快速鸟瞰
去中心化的意义
“把钱放在自己手里”比“放在银行里”更能说明区块链的价值:一条以太坊私有链不需要支付宝或银行的服务器做信用背书,所有节点共同维护同一份账本,单点故障不再致命。
以太坊私有链架构
- 普通节点=“使用者”:发送交易、读取合约
- 矿工节点=“记账员”:验证交易、生成新区块、赚取以太奖励
- 账本=整条私链,本地存储在
datadir目录下的 leveldb 文件
常见术语
创世块、链ID、gasLimit、difficulty、geth控制台、p2p端口
Ubuntu 20.04 实战:3步启动第一条以太坊私有链
实验环境:1 台 Ubuntu 20.04 服务器,2 vCPU + 4 GB 内存即可。
准备工作:安装 go-ethereum
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install -y ethereum
geth version # 显示版本即成功如果在内网环境,可提前下载 geth 二进制包到 /usr/local/bin 并 chmod +x。
第1步:定制创世配置文件
创建文件 genesis.json,一行不改直接拷贝也能跑,但记得把 chainId 和 difficulty 调整成适合课堂或测试场景的值:
{
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x664b8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x0200",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"alloc": {}
}小提示:链ID建议≥1024,区数值低可避免与公链冲突;difficulty 在 0x10–0x1000 之间,本地测试即可15秒内出块。
第2步:初始化数据目录
mkdir data01
geth --datadir data01 init genesis.json终端返回 “Successfully wrote genesis state” 说明创世块已落地在 data01/geth/chaindata 中。此时可执行:
du -h data01观察初始数据库大小不到 50 KB。
第3步:启动节点并进入 geth 控制台
让私链脱离公网噪声,别忘了加上 --nodiscover。下面一行的端口只做演示,可按需调整:
geth --datadir data01 --networkid 20140628 \
--http --http.corsdomain "*" --nodiscover \
--port 30313 --http.port 8548 > geth.log 2>&1 &
sleep 3
tail -f geth.log看到 “Started P2P networking” 即启动成功,再开新窗口:
geth attach http://localhost:8548就像 ssh 进服务器一样,进入了 JavaScript 交互控制台。
必会操作:账户、挖矿与转账
1. 创建钱包地址
personal.newAccount("abc123")
// 返回 0x4bb96091e8... 形式地址把密码写到 echo "abc123" > passphrase,未来脚本化无人值守。
2. 开始挖矿 & 查看奖励
控制台输入:
eth.coinbase // 查看默认矿工地址
miner.start(1) // CPU单核挖矿
eth.getBalance(eth.accounts[0]) // 实时查证余额第一次出块通常在 30 秒–1 分钟,耐心等待终端 log 出现 “Successfully sealed new block”。 miner.stop() 可立即停机。
3. 向新账户转账
新建接收账户后:
eth.sendTransaction({
from: eth.accounts[0],
to: eth.accounts[1],
value: web3.toWei(3, "ether")
})由于尚未解锁,需输入:
personal.unlockAccount(eth.accounts[0])常见问题 FAQ
Q1:安装完成后输入 geth 提示找不到命令?
A:确认 which geth 有输出 /usr/local/bin/geth;如无则 export PATH=$PATH:/usr/local/bin。
Q2:初始化失败,提示 “missing genesis file”?
A:检查 genesis.json 路径是否与当前目录一致,或使用绝对路径 geth --datadir ./data01 init /home/ubuntu/genesis.json。
Q3:挖矿后余额仍为 0?
A:大概率链ID与公网冲突,请确认为自定义链ID≥1024;并使用 eth.blockNumber 看区块是否真的增长。
Q4:想多台节点互联?
A:A 节点使用 --port 30313,B 节点运行 geth --port 30314 --bootnodes "enode://...@[A_IP]:30313" 即可。
Q5:geth 控制台命令记不住?
A:输入 personal. 后按 Tab 自动补全,或直接浏览器搜 “geth js api 官方文档”。
Q6:如何导出私钥备份?
A:控制台 personal.exportRawKey(eth.accounts[0], "密码") 复制输出即可;或者进入 data01/keystore 目录拷贝 UTC JSON 文件。
进阶技巧:监控与备份脚本
- 实时看块高
while true; do curl -s -X POST http://localhost:8548 -H 'content-type: application/json' -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' | jq -r '.result' | xargs printf "current height: %d\n"; sleep 5; done - 定时打包快照
tar czf data01-$(date +%F).tar.gz data01每天 凌晨 3 点 crontab 带走。 - 图形化钱包接入
下载 以太坊钱包客户端(桌面版),设置自定义 RPChttp://服务器IP:8548,即刻可视化发币、部署合约。
下一站:智能合约部署
如果觉得私链已经跑稳,👉 开启 Solidity 实战:在本地私有链上部署智能合约 将带你从 Remix IDE 到自建 DApp。
通过本教程,你不仅拥有一条可搜、可测、可调试的 以太坊私有链,还具备了为团队演示、课程演示甚至灰度环境的完整实验环境。继续深挖,💡 如何把私有链接入硬件钱包进行签名交易? 永远好奇,永远探索。