## 文章引言
以太坊私有鏈搭建,可以給想接觸和玩的新手提供一個入門體驗,你們真正感受下區塊鏈的魅力。還有就是在測試環境中也可以的,以太坊主網數據同步始終都是一個硬傷,硬盤消耗太大而且國內同步一般很難完全實現的了,下面的文章就是為了更大家提供一定的方便,詳細的講解里面的步驟。
## 實戰案例
### 新建創世文件
新建以太坊工程目錄
```
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++函數庫等等。并不定期奉送各種福利。

> 歡迎訂閱:極客筆記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 資料、工具推薦和擴展閱讀
- 結論
- 附錄