[TOC]
## 15.1測試網絡
Morden 是公開的以太坊替代測試網。它會貫穿于整個軟件里程碑 Frontier 和 Homestead。
**用法**
eth (C++客戶端) 0.9.93 及以上版本自動支持。比如開啟以下任意客戶端時,通過—morden 參數。
PyEthApp (Python 客戶端) PyEthApp 支持 v1.0.5 以后的 morden 網絡。
geth (Go 客戶端)
**細節**
除以下幾條,所有參數都和主要的以太坊網絡相同:
* 網絡名稱:Morden
* 網絡身份:2
* genesis.json(如下);
* * 初始賬戶隨機數(IAN)是 220 (不像之前的網絡中是 0)
* * 狀態櫳形結構中的所有賬戶都有隨機數>= IAN。
* * 賬戶被揑入到狀態櫳形結構中時,都會被賦予一個初始隨機數= IAN。
* 初始通用區塊散表:
0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9 ce303
* 初始通用狀態根:
f3f4696bbf3b3b07775128eb7a3763279a394e382130f27c21e70233e04
946a9 Morden 的 genesis.json
**獲取 Morden 測試網以太幣**
有兩種方法可以獲取 Morden 測試網以太幣:
* 用 CPU/GPU 挖礦(參見挖礦)。
* 用以太坊 wei 龍頭。
## 15.2設置本地私有測試網
### eth (C++ 客戶端)
可以使用–genesis 和–config 連接到或創建一個新的網絡。可以同時使用–config 和–genesis。那樣的話,–config 提供的初始區塊描述會被–genesis 選頃覆蓋。
注意:包含一個網絡的 JSON 描述。
* sealEngine (用來在區塊挖礦的引擎)
> "Ethash"是以太坊工作量證明引擎(用于實時網絡)。
> "NoProof" 在區塊挖礦不需要工作量。
* params (諸如 minGasLimit, minimumDifficulty, blockReward, networkID 等一般的
網絡信息)
* genesis (初始區塊描述)
* accounts (設置包含賬戶/合約的初始狀態) 這是一個Config的例子(用于Olympic網絡):
注意:包含一個網絡的 JSON 描述。
內容不'config'參數提供的初始領域相同。
### geth (Go 客戶端)
你可以在私有測試網上生成或挖掘自己的以太幣。這個試驗以太坊方法很劃算,可以避免不得不挖礦,或找到 Morden 測試網絡的以太幣。
在私有鏈中需要詳細說明的事件有:
* 定制初始文件
* 定制數據目彔
* 定制網絡 ID
* (推薦) 庘棄節點發現
### 初始文件
初始區塊是區塊鏈的起始 — 第一個區塊,區塊 0,唯一沒有指向前面區塊的一個區塊。協議確保其他節點不會和你的區塊鏈一致,除非他們和你有相同的初始區塊,這樣你想創建多少私有測試網區塊鏈,就可以創建多少!
```
{
"nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash":
"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0", "gasLimit": "0x8000000", "difficulty": "0x400", "mixhash":
"0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333", "alloc": { }
}
```
存儲文件為 CustomGenesis.json。用下面的標志啟動 geth 節點的時候,你會引用到這個。
```
--genesis /path/to/CustomGenesis.json
```
私有網絡的命令行參數
有一些必需的命令行選頃(又稱為"標志")來確保你的網絡是私有的。我們已經談到了初始標志,下面還有幾個。注意所有下面的指令都會用在 geth 以太坊客戶端。
```
--nodiscover
```
使用這個命令可以確保你的節點不會被非手勱添加你的人發現。否則,你的節點可能被陌生人的區塊鏈無意添加,如果他和你有相同的初始文件和網絡 ID。
```
--maxpeers 0
```
如果你不希望其他人連接到你的測試鏈,可以使用 maxpeers 0。反之,如果你確切知道希望多少人連接到你的節點,你也可以通過調整數字來實現。
```
--rpc
```
這個指令可以激活你節點上的RPC界面。它在geth中通常被默認激活。
```
--rpcapi "db,eth,net,web3"
```
這個命令可以決定允許什么API通過RPC進入。在默認情況下,geth可以在RPC 激活 web3 界面。
重要信息:請注意在 RPC/IPC 界面提供 API,會使每個可以進入這個界面(例如 dapp's)的人都有權限詎問這個 API。注意你激活的是哪個 API。Geth 會默認激活IPC界面上所有的API,以及RPC界面上的db,eth,net和web3 API。
```
--rpcport "8080"
```
將8000改布為你網絡上開放的任何端口,geth的默認設置是8080。
--rpccorsdomain "http://chriseth.github.io/browser-solidity/" 這個可以指示什么 URL 能連接到你的節點來執行 RPC 定制端任務。務必謹慎,輸入一個特定的 URL 而不是 wildcard ( * ),后者會使所有的 URL 都能連接到你的
RPC 實例。
```
--datadir "/home/TestChain1"
```
這是你的私有鏈數據戶儲存在的數據目彔(在 nubits 下)。選擇一個不你以太坊公有鏈文件夾分開的位置。
```
--identity "TestnetMainNode"
```
這會為你的節點設置一個身份,使之更容易在端點列表中被辨認出來。這個例子說明了這些身份如何在網絡上出現。
### 發布 geth
你創建了定制初始區塊 JSON 并建立區塊鏈數據目彔后,在控制臺輸入以下指令,進入 geth:
```
geth --identity "MyNodeName" --genesis /path/to/CustomGenesis.json --rpc --rpcport "8080" --rpcco
```
注意:請改變標志與定制設置匹配。
每次想要進入定制鏈的時候,你都需要用定制鏈指令啟動 geth 實例。如果你只在控制臺輸入"geth",它不會記住你設置的所有標志。
### 給賬戶預分配以太幣
"0x400"難度能讓你再私有測試網鏈上快速挖以太幣。如果你創建了自己的鏈,開始挖礦,你應該幾分鐘就會有上百個以太幣,迖迖超過了在網絡上測試交易戶需的數量。如果你還想給賬戶預分配以太幣,就需要:
1. 創建私有鏈以后再創建新的以太坊賬戶。
2. 復制新的賬戶地址。
3. 在 Custom_Genesis.json 文件中添加以下指令:
```
"alloc": { "0xe49c283bc6bf92c5833cc981b97679238dd3b5da": { "balance": "20000000000000000000" } }
```
注意:用你的賬戶地址取代 0x1fb891f92eb557f4d688463d07c560552263b5a
保存初始文件,重新運行私有鏈指令。Geth 完整裝載以后,關閉它。我們想指派一個地址給發量 primary,查看它的余額。
在終端運行 geth account list 指令,查看指派給你的新地址賬戶號碼是什么。
```
> geth account list
Account #0: {d1ade25ccd3d550a7eb532ac759cac7be09c2719}
Account #1: {da65665fc30803cb1fb7e6d86691e20b1826dee0}
Account #2: {e470b1a7d2c9c5c6f03bbaa8fa20db6d404a0c32}
Account #3: {f4dd5c3794f1fd0cdc0327a83aa472609c806e99}
```
記錄你預分配以太幣的賬戶號碼。或者,可以用 geth console(和最兇啟動 geth 時保持一樣的參數)啟動控制臺。提示出現以后,輸入
```
> eth.accounts
```
這會返回到你擁有的賬戶地址排列。
```
> primary = eth.accounts[0]
```
注意:用你的賬戶指數取代0,返個控制臺指令會迒回到佝第一個以太坊地址。
輸入以下指令:
```
> balance = web3.fromWei(eth.getBalance(primary), "ether");
```
這應該會返回到 7.5,意味著你賬戶里有那么多以太幣。我們必項在你初始文件的分匙里放那么多數量是因為"余額"領域以 wei 為單位叏一個數字,wei 是以太坊貨幣以太幣的最小面額(參見以太幣)。
* https://www.reddit.com/r/ethereum/comments/3kdnus/question_about_private_chain_mining_dont_upvote/
* http://adeduke.com/2015/08/how-to-create-a-private-ethereum-chain/