區塊鏈開發:以太坊網絡
區塊鏈開發:以太坊網絡
一、geth
Geth 又名Go Ethereum. 是以太坊協議的三種實現之一,由Go語言開發,完全開源的項目。Geth 可以被安裝在很多操作系統上,包括Windows、Linux、Mac的OSX、Android或者IOS系統
Geth官網:https://geth.ethereum.org/
Geth的Github地址:https://github.com/ethereum/go-ethereum
Ubuntu安裝geth客戶端:
官方教程:https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
安裝方法一:
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
系統聯網執行後,即完成了安裝以太坊客戶端,其中包括geth,bootnode, evm, disasm, rlpdump,ethtest
此時如果輸入Geth命令,會出現啟動以太坊啟動的畫面
安裝方法二:
git clone https://github.com/ethereum/go-ethereum sudo apt-get install -y build-essential golang cd go-ethereum make geth greg@greg:~$ geth version Geth Version: 1.7.3-stable Git Commit: 4bb3c89d44e372e6a9ab85a8be0c9345265c763a Architecture: amd64 Protocol Versions: [63 62] Network Id: 1 Go Version: go1.9 Operating System: linux GOPATH=/home/greg/go GOROOT=/home/greg/local/go
二、以太坊查看網絡狀態
attach:Start an interactive JavaScript environment (connect to node) 啟動交互式JavaScript環境(連接到node)
打開geth --testnet greg@greg:~/.ethereum$ geth attach ipc://${HOME}/.ethereum/testnet/geth.ipc Welcome to the Geth JavaScript console! instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 查看鏈接狀態 net.listening net.peerCount 查看自己的夥伴的網絡信息 admin.peers 查看自己的網絡信息 admin.nodeInfo 打開.bashrc寫入 alias gat=‘geth attach ipc://${HOME}/.ethereum/testnet/geth.ipc‘
三、以太坊構建本地私有網絡
1.編輯創世區塊
greg@greg:~$ mkdir ethprivate
greg@greg:~$ cd ethprivate/
greg@greg:~/ethprivate$ vim genesis.json
greg@greg:~/ethprivate$ vim genesis.json
greg@greg:~/ethprivate$ cat genesis.json
{
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
genesis(創世)區塊是區塊鏈的起點,是它的第一塊區塊,0號區塊,唯一一個沒有前任的區塊。這個協議確保了沒有其他節點會和你的節點的區塊鏈版本一致,除非它們的創世區塊和你的一模一樣。通過這種方法,你就可以創建任意多的私有區塊鏈。
Mixhash
一個256位的哈希值,和nonce配合,一起用來證明在區塊鏈上已經做了足夠的計算量(工作證明)。這個nonce 和 mixhash 的組成,必須滿足一個在黃皮書中所描述的數學上的條件,黃皮書 4.3.4。
Nonce
一個64位的哈希值,和mixhash配合,一起用來證明在區塊鏈上已經做了足夠的計算量(工作證明)
Difficulty
定義挖礦的目標,可以用上一個區塊的難度值和時間戳計算出來,值越高,礦工越難挖到區塊
Alloc 預先填入一些錢包和余額
Coinbase
160位的錢包地址。在創世區塊中可以被定義成任何的地址,因為當每挖到一個區塊的時候,這個值會變成礦工的etherbase地址
Timestamp 一個unix的time()函數的輸出值,時間戳
extraData 32字節長度,可以為私有鏈留下一些信息,如你的姓名等,用以證明這個私有鏈是你創建的
gasLimit 當前鏈,一個區塊所能消耗的gas上限
私有鏈中會使用到的命令行參數
--nodiscover
添加這個參數,確保沒有人能發現你的節點。不然的話,可能有人無意中會鏈接到你的私有區塊鏈。
--maxpeers 0
使用maxpeers 0,如果你不希望其他人連接到您的測試鏈。當然,您也可以調整這個數,如果你知道有多少同伴會連接你的節點。
--rpc
在你的節點上激活RPC接口。這參數在geth中默認啟用。
--rpcapi "db,eth,net,web3"
這個命令描述哪些接口可以通過RPC來訪問,默認情況下,geth開啟的是web3接口。
--rpcport "8080"
將端口號設置成8000以上的任何一個你網絡中打開的端口。默認是8080。
--rpccorsdomain http://chriseth.github.io/browser-solidity/
設置可以連接到你的節點的url地址,以執行RPC客戶端的任務。最好不要使用通配符 * ,這樣將允許任何url都可以鏈接到你的RPC實例。
--datadir "/home/TestChain1"
私有鏈的數據目錄,確保與公共以太坊鏈的數據目錄區分開來。
--port "30303"
這是“網絡監聽的端口”,您可以用它手動的和你的同伴相連。
--identity "TestnetMainNode"
為你的節點設置一個ID。用於和你們的一系列同伴進行區分。
2.初始化創世區塊
greg@greg:~/ethprivate$ geth --datadir "./" init genesis.json
WARN [02-21|23:48:06] No etherbase set and no accounts found as default
INFO [02-21|23:48:06] Allocated cache and file handles database=/home/greg/ethprivate/geth/chaindata cache=16 handles=16
Fatal: Failed to write genesis block: genesis has no chain configuration
greg@greg:~/ethprivate$ ls
genesis.json geth keystore
此時當前目錄下面會新增出兩個文件夾geth和keystore
geth中保存的是區塊鏈的相關數據
keystore中保存的是該鏈條中的用戶信息
每次當你想要使用你自定義的私有鏈時,你都需要先使用geth來運行以上的命令來啟動它。
3.創建自己的私有鏈條
創建自己的私有鏈條,同時記錄日誌輸出到geth.log
greg@greg:~/ethprivate$ geth --datadir "./" --nodiscover console 2>>geth.log
Welcome to the Geth JavaScript console!
instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
在自己的私有鏈條上創建用戶
> eth.accounts
[]
> personal.newAccount("123456")
"0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8"
> eth.accounts
["0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8"]
> personal.newAccount("abcdef")
"0x8cd642b5f69a24fd3d05786dfe0eb3f44dc8bb33"
> eth.accounts
["0xe158bf2c29ca283c7bdc99880e36985d9f7d23f8", "0x8cd642b5f69a24fd3d05786dfe0eb3f44dc8bb33"]
輸入命令personal.newAccount("123456")
, 該命令將創造一個新的用戶,該用戶的密碼是123456
再次輸入命令 eth.accounts
, 我們會發現一個新的用戶被創建了出來,這就代表我們已經創建了一個賬戶,重復personal.newAccount()
和eth.accounts
我們可以創建若幹個賬戶出來
區塊鏈開發:以太坊網絡