## 文章引言
以太坊私有链搭建,可以给想接触和玩的新手提供一个入门体验,你们真正感受下区块链的魅力。还有就是在测试环境中也可以的,以太坊主网数据同步始终都是一个硬伤,硬盘消耗太大而且国内同步一般很难完全实现的了,下面的文章就是为了更大家提供一定的方便,详细的讲解里面的步骤。
## 实战案例
### 新建创世文件
新建以太坊工程目录
```
mkdir -p /home/ubuntu/data/eth_data
```
新建创世配置文件
```
vim genesis.json
```
配置内容如下参考,具体根据情况修改。
```
# genesis.json
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x80000000",
"difficulty": "0x3",
"coinbase": "0x3333333333333333333333333333333333333333",
"config":{
"chainId": 55,
"homesteadBlock": 0,
"eip155Block": 0
},
"alloc": {}
}
```
**参数设置:**
- nonce:64位随机数,用于挖矿
- timestamp:创世块的时间戳
- parentHash:上一个区块的hash值,因为是创世块,所以这个值是0
- mixhash:与 nonce 配合用于挖矿,由上一个区块的一部分生成的 hash。
- extraData:附加信息,任意填写
- gasLimit :对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们就测试链,所以随意填写。
- difficulty:难度值,越大越难
- coinbase:矿工账号,第一个区块挖出后将给这个矿工账号发送奖励的以太币。
- alloc: 预设账号以及账号的以太币数量,测试链挖矿比较容易可以不配置
- chainId 指定了独立的区块链网络 ID,不同 ID 网络的节点无法互相连接。
### 初始化创世区块
```
geth --datadir=/home/ubuntu/data/eth_data init /home/ubuntu/data/eth_data/genesis.json
```
### 启动网络节点
```
geth --identity "TestNode" --rpc --rpcapi web3,eth,net,db,personal,admin --rpcaddr 0.0.0.0 --rpcport "8545" --datadir=/home/ubuntu/data/eth_data --port "30303" --ws --wsaddr 0.0.0.0 --wsport "8546" --wsorigins="*" --nodiscover console
```
**参数说明**
- datadir, 设置当前区块链网络数据存放的位置
- init,初始化,生成创世区块
- identity, 自定义的节点名字
- rpc , 允许 HTTP-RPC 访问
- rpcport , HTTP_RPC的访问端口,默认为8545
- port , 网络监听端口,默认为30303
- datadir, 设置当前区块链网络数据存放的位置
- console, 启动命令行模式,可以在Geth中执行命令
- nodiscover, 私有链地址,不会被网上看到
### 开始挖矿
```
# 创建一个新账号,密码为123456
personal.newAccount("123456")
# 查看所有账号
eth.accounts
# 开始挖矿
miner.start(1)
# 停止挖矿
miner.stop()
# 查看节点
admin.nodeInfo.enode
# 加入节点
admin.addPeer("enode://b753493071f1983fe7017425713dea2ef6a963db52d73b0ae6f0bc3a88f18bbe874237069c1d72f270a3213ce6f892b6c7b10524984051e2e556c63bad9ec387@192.168.1.126:30303")
# 查看节点连接
net.peerCount
admin.peers
# 查看账户金额
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
# 查看区块高度
eth.blockNumber
# 查看第10个区块的细节
eth.getBlock(10)
```
### 转账交易
**开始转账**
转账前先解锁账户
```
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(30,"ether")})
```
解锁账号
```
personal.unlockAccount(eth.accounts[0])
```
查看区块内容
```
eth.getBlock(11)
```
返回结果:
```
{
difficulty: 131072,
extraData: "0xd88301080c846765746888676f312e31302e33856c696e7578",
gasLimit: 2124527304,
gasUsed: 21000,
hash: "0x68495bf329e886a8043d1af74d145a870ae6aa2d4e42134499b3730e5c35d4fe",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x9cac40f650e2cbe459dcb32c7c23103497134467",
mixHash: "0xbbf5053e0409cded11f0c8f1059cad389d366723cb2f6c077d6c71c36d31a254",
nonce: "0x3cc35610dc92f143",
number: 11,
parentHash: "0x819037bcc65eb789eca82fcc3d6c686852ab8297df6396cffa6cfffeaffbcd88",
receiptsRoot: "0x170861bbc9f17f29b4c8ef046f44fa7435c3ad3a54e752591c87050345c29d31",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 653,
stateRoot: "0x6e44fbe836ebf62523a37bbbb1beaad0c0802be9ff5c4e7b19c16a1eb4c50112",
timestamp: 1529972844,
totalDifficulty: 1444675,
transactions: ["0x8d6d1eb3c1c82be1f419d8f772048644361c41362fd8de27f8252470f975d6bb"],
transactionsRoot: "0x98881bb99ed82df9a69726705fb2ac2d1371e9ba992c52ed3b4cd3ee50762d38",
uncles: []
}
```
## 其他总结
### 转换单位
- Wei = 10^0 Wei
- Ada = 10^3 Wei
- Babbage = 10^6 Wei
- Shannon = 10^9 Weiv
- Szabo = 10^12 Wei
- Finney = 10^15 Wei
- Ether = 10^18 Wei
- Einstein = 10^21 Wei
- Douglas = 10^42 Wei
## 参考文献
- [以太坊私有链搭建指南](https://g2ex.github.io/2017/09/12/ethereum-guidance/)
## 关于我们
为程序员提供优质博文、实战笔记、开发资源、学习资料内容包括:区块链、架构、Golang、Vuejs、Python、Nodejs、C/C++函数库等等。并不定期奉送各种福利。
![我是图片](http://blog.geeknr.com/usr/uploads/2020/04/1196444084.jpg)
> 欢迎订阅:极客笔记Geeknr
>
> 我的名言:梦想还是要有的,万一实现了呢?
>
> 原文链接:http://blog.geeknr.com/index.php/archives/24/
>
> 更多信息请点击下方【阅读原文】里面内容随时更新。
- 关于本书
- 引言
- 准备工作
- 安装 Go语言开发环境
- 开始使用Go
- 创建一个Go模块
- 第一章 手把手系列
- 1.1 教你搭建Nginx教程
- 1.2 教你搭建Jupyter教程
- 1.3 教你搭建Node教程
- 1.4 教你搭建Fabric教程
- 1.5 教你搭建Ethereum教程
- 1.6 教你搭建Bitcoin教程
- 1.7 教你搭建Systemd教程
- 第二章 架构师之路
- 2.1 微服务开发笔记
- 2.2 Docker开发笔记
- 2.3 ElasticSearch开发笔记
- 2.4 Linux开发笔记
- 2.5 Mysql开发笔记
- 2.6 Nginx开发笔记
- 2.7 Redis开发笔记
- 第三章 区块链教程
- 3.1 Bitcoin开发笔记
- 3.2 Ethereum开发笔记
- 3.3 USDT开发笔记
- 第四章 网络知识库
- 4.1 比特币白皮书
- 4.2 以太坊白皮书
- 第五章 技术博客园
- 5.1 Fabric架构详解
- 5.2 技术开发指南
- 5.3 共识机制详解
- 第六章 项目管理
- 6.1 项目运行环境
- 6.2 项目经理的角色
- 6.3 第6、7、8章框架
- 第七章 公务员考公
- 7.1 程序员成功上岸经历
- 7.2 程序员备考的最佳实践
- 7.3 程序员备考过程中会遇到哪些问题?
- 7.4 公考公平吗,35岁再去考可以么?
- 7.5 资料、工具推荐和扩展阅读
- 结论
- 附录