Geth 全稱是go-ethereum,是一個以太坊客戶端,由go語言編寫,是目前以太坊最常用的客戶端。以太坊還有用C++、Ruby、Python、Java 等其他多種語言編寫的客戶端,不同類型的客戶端是爲了滿足不同的需求場景。官方地址:https://github.com/ethereum/go-ethereum
創世塊
創建目錄 ./chainwork/private ,用來存放以太坊節點的數據。
// 創建chainwork目錄
mkdir ~/chainwork/private
創世塊文件genesis.json
創建配置文件 genesis.json 用於創建創世塊和設置網絡。
// genesis.json
{
"config": {
"chainId": 4224,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}
}
創世塊參數詳解
// nonce和mixhash是作爲輸入,讓每個節點都可以通過計算來做
// difficulty 就是制定了本鏈一開始的挖礦難度,在我們的私有測試節點中, 這個值設得很低,這樣就比較容易挖到礦
// alloc 可以預分配一些以太幣給某些地址,這裏我們不做預分配
// coinbase 就是當成功挖出 genesis 區塊後,接收獎金的地址
// timestamp 本區塊挖出來的時間戳,全網將依據前後 兩個區塊的時間戳之差來調整挖礦的難度
// parentHash 指向前一個區塊的哈希指針,創世紀區塊中的 parentHash 接地
// extraData 可用於存儲任何信息
// gasLimit 規定了每一個區塊中能夠消耗的最大的 gas 值,也就事實上限制了區塊的大小
// config 用來爲這個私有網絡確立一系列參數
// chainId 是本私有鏈的 ID
// homesteadBlock 指明 Homestead 版本的兼容的區塊開始編號
// EIP155 兼容的區塊開始編號,EIP155 - "Simple Relay Attack Protection
// EIP158 兼容的區塊開始編號
Geth命令
啓動Geth服務節點
// 以下操作創建了一個以太坊節點,這個節點並沒有接入主網,而是一個私有網絡。
// 目前在該網絡中,只有一個節點,並且沒有任何的賬戶。用戶可以通過命令行來對以太坊網絡進行交互。
cd ~/chainwork/private
geth init genesis.json --datadir ./data0
geth --datadir ./data0 --networkid 4224 --rpc --rpcport 8545 --port 30303 --rpcapi eth,web3,personal,net console 2> log.txt
參數解析
// –datadir 代表文件夾地址,
// –nodiscover 代表該鏈條不希望被其他節點發現,
// console >> geth.log 代表將控制檯輸出到文件geth.log中去
// 當然從命令行模式退出,也很簡單,只要打入exit, 即可退出
查看,創建賬戶
// 查看當前該區塊鏈中共有幾個賬號,以及每個賬號的公鑰地址。
> eth.accounts
[]
//ubuntu爲密碼,賬號是自動生成的
> personal.newAccount("ubuntu")
"0xb27cdf1f4b331eb2a1aa0f9a3a7076c65a915e41"
> eth.accounts
["0xb27cdf1f4b331eb2a1aa0f9a3a7076c65a915e41"]
賬戶解析
在以太坊系統中,狀態是由被稱爲“賬戶”(每個賬戶由一個20字節的地址)的對象和在兩個賬戶之間轉移價值和信息的狀態轉換構成的。以太坊的賬戶包含四個部分:
隨機數,用於確定每筆交易只能被處理一次的計數器
賬戶目前的以太幣餘額
賬戶的合約代碼,如果有的話
賬戶的存儲(默認爲空)
開啓挖礦
> miner.start();
null
查看挖礦情況
//獲取挖礦狀態,true表示正在挖礦,false反之
> eth.mining()
true
// 追蹤日誌
ubuntu@ubuntu:~/chainwork/private$ tail -f 10000 log.txt
tail: cannot open ‘10000’ for reading: No such file or directory
==> log.txt <==
INFO [09-06|22:05:52.110]
Ether幣的基本單位
Ether幣最小的單位是Wei,也是命令行默認的單位, 然後每1000個進一個單位,依次是
- kwei (1000 Wei)
- mwei (1000 KWei)
- gwei (1000 mwei)
- szabo (1000 gwei)
- finney (1000 szabo)
- ether (1000 finney)
簡單地說就是就是1 以太幣 = 1000000000000000000 Wei (這就是上一站章中爲何我們轉移0.01個以太幣,結果卻顯示很長的原因)