关键词:以太坊、ETH、私有链、Geth、智能合约、区块链节点、以太币、挖矿
0x00 ETH 的前世今生
比特币开启去中心化加密资产的大门,但其脚本扩展性有限,难以支撑复杂业务。以太坊(Ethereum)因此而生,把“图灵完备”的智能合约引入 区块链 世界,开发者得以发行自定义代币、创建 去中心化应用(DApp)。
自 2015 年主网上线以来,以太币(ETH)稳居市值第二的位置,而 私有链 因其可掌控、无成本等优势,已成为开发者测试、企业内部 MVP 验证的首选环境。
0x01 环境与基础软件安装
系统与配置
- OS:CentOS 7 x64(2c4g100G)
- 工具:Golang 1.14 + 官方 Geth 二进制
# 安装 Go
yum -y install golang
# 下载并解压
wget https://geth.ethereum.org/downloads/geth-linux-amd64-1.9.14-6d74d1e5.tar.gz
tar xf geth-linux-amd64-1.9.14-6d74d1e5.tar.gz
sudo mv geth /usr/local/bin
geth -h # 验证安装成功0x02 十分钟完成私有链搭建
创建项目目录
mkdir -p /data/eth/{chaindata,config}撰写创世文件 genesis.json
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0000000000000042",
"extraData": "0x0000000000",
"gasLimit": "0xffffffff",
"difficulty": "0x20000",
"alloc": {}
}difficulty设低值,方便 CPU 挖矿。chainId非 1,不与主网冲突。
初始化区块链
geth --datadir /data/eth/chaindata init /data/eth/config/genesis.json终端提示 Successfully wrote genesis state 表示创世块已写盘。目录结构:
/data/eth
├── chaindata
│ ├── geth
│ └── keystore
└── config启动节点
geth --datadir /data/eth/chaindata \
--networkid 666 \
--http --http.addr 0.0.0.0 --http.port 8545 \
--http.api eth,net,web3,personal,miner,txpool \
--http.corsdomain "*" \
console参数解读
networkid:私有链唯一标识,建议别与主网重复。http.*:开启 RPC,方便后续 智能合约 部署与调试。
0x03 JavaScript Console 互动指南
进入控制台后,核心对象列表: web3、eth、personal、miner、admin、txpool。
创建账户
> personal.newAccount()
Passphrase: ****
"0x3bd8f1adf6fce874b6fc004629ccdb30f16e5283"
> eth.accounts // 查看已有账户
[]每创建一次,会在 keystore 存一份加密密钥文件,请务必 离线备份。
查看节点信息
> admin.nodeInfo.enode复制 enode:// 这段,下节用于添加 对等节点 (peer)。
0x04 致富之道:区块奖励与挖矿
私有链没有交易手续费收入,核心盈利手段就是 挖矿。
启动挖矿示例:
> miner.start(2) // 使用 2 线程挖矿首次运行会生成 DAG(约 1 GB),耗时 2–5 分钟。
停止命令:
> miner.stop()查看余额
> web3.fromWei(eth.getBalance(eth.accounts[0]), 'ether')默认每挖一个块奖励 5 ETH(创世设置可改)。
0x05 原生交易演练
转账流程
- 创建第二个账户:
> personal.newAccount() - 解锁付款账户:
> personal.unlockAccount(eth.accounts[0]) 发送 5 ETH:
> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: web3.toWei(5, 'ether')})返回交易 hash。
- 挖矿一次打包:
> miner.start(); admin.sleepBlocks(1); miner.stop() - 查询到账:
> web3.fromWei(eth.getBalance(eth.accounts[1]), 'ether')
0x06 深入区块与交易查询
> eth.blockNumber // 当前区块高度
> eth.getBlock(123) // 根据高度查详情
> eth.getTransaction("0xhashcode") // 根据 tx hash 查交易字段说明:gasUsed、miner、value 等,均可实时审计。
私密网络互联(可选)
将另一台机器的 enode 添加到当前节点即可双向同步区块:
> admin.addPeer("enode://...@ip:port")私有链运维 FAQ
Q1:怎样在同一台机启动多节点?
A:复制两条命令在不同终端,分别指定不同 --datadir 和 --port,再手动 addPeer。
Q2:DAG 生成失败提示 VRAM 不足?
A:把 difficulty 调小或使用 GPU 挖矿参数 --mine --miner.threads 0。
Q3:如何把现有私链数据迁移到另一服务器?
A:打包 /data/eth/chaindata 与 config/genesis.json 拷贝后,确保 networkid 一致即可。
Q4:为什么浏览器连接失败?
A:浏览器 RPC 访问需加 --http.corsdomain "localhost",并确保端口未被防火墙拦截。
Q5:账户私钥文件丢失怎么办?
A:无解,务必把 keystore/UTC-*.json 备份至多份离线介质。
结语
完成 以太坊私有链 的初始化、挖矿、转账、查询后,你已迈出智能合约开发的关键一步。下一步可引入 Truffle、Remix 做一键部署,实现 ERC-20 代币、NFT 或 DAO 等 DApp。愿你玩得尽兴,资产涨幅滚滚来!