区块链实践(一) 以太坊网络+geth搭建私有网络实战
一、以太網(wǎng)網(wǎng)絡(luò)?
理解以太坊 PrivateNetwork 先要理解以太坊的兩種官方網(wǎng)絡(luò), 目前以太坊官方提供了兩種網(wǎng)
**?
1 以太坊生產(chǎn)網(wǎng)絡(luò)
以太坊的生產(chǎn)網(wǎng)絡(luò)顧名思義,也就是產(chǎn)生真正有價(jià)值的 的以太幣的網(wǎng)絡(luò)。 目前生產(chǎn)網(wǎng)絡(luò)目前已經(jīng)生成了300萬以上的區(qū)塊,還在持續(xù)生成中。挖礦挖出來的每個(gè)以臺(tái)幣在10美金以上。 生產(chǎn)環(huán)境下的以太坊狀態(tài)時(shí)如此的(截圖自2017-02-17)
生產(chǎn)環(huán)境網(wǎng)絡(luò)優(yōu)點(diǎn)?
全球化的,部署在Internet環(huán)境上的,?
智能合約的代碼,執(zhí)行,區(qū)塊的調(diào)用,都可以清晰的查看到。?
部署在生產(chǎn)環(huán)境上的智能合約,全世界任何應(yīng)用都可以調(diào)用
缺點(diǎn):?
任何合約執(zhí)行都會(huì)消耗真實(shí)的以太幣,也就是真實(shí)的現(xiàn)金。不適合開發(fā)、調(diào)試和測(cè)試,?
所有節(jié)點(diǎn)是全球化的,速度較慢?
且對(duì)于部分商業(yè)應(yīng)用來說,只需要一部分節(jié)點(diǎn),例如分布式部署的10-20臺(tái)服務(wù)器即可。而不需要遍布全球的網(wǎng)絡(luò)。
2 以太坊測(cè)試網(wǎng)絡(luò) TestNet
以太坊的測(cè)試網(wǎng)絡(luò)也是官方提供的,顧名思義就是專供用戶來開發(fā)、調(diào)試和測(cè)試的。 上面的合約執(zhí)行不消耗真實(shí)的以太幣。也就是不花錢
所以如果開發(fā)簡(jiǎn)單的智能合約的話,用測(cè)試網(wǎng)絡(luò)也就足夠了,用戶可以把更多的精力集中在智能合約的編寫上。
但因?yàn)榫W(wǎng)絡(luò)是官方提供的,因此對(duì)于以太坊技術(shù)的底層實(shí)現(xiàn)、Geth的各種參數(shù)接口、整個(gè)以太坊的技術(shù)真實(shí)性能的理解就會(huì)弱很多。所以從開發(fā)的角度來說,一個(gè)更好的選擇是Private Network,可以從技術(shù)的底層去深入理解以太坊。
測(cè)試環(huán)境網(wǎng)絡(luò)優(yōu)點(diǎn)
合約執(zhí)行不消耗真實(shí)貨幣?
全球化的,部署在Internet環(huán)境上的,?
智能合約的代碼,執(zhí)行,區(qū)塊的調(diào)用,都可以清晰的查看到。?
部署在測(cè)試環(huán)境上的智能合約,全世界任何應(yīng)用都可以調(diào)用?
缺點(diǎn):
所有節(jié)點(diǎn)是全球化的,速度較慢?
測(cè)試網(wǎng)絡(luò)不可能作為商業(yè)應(yīng)用的實(shí)際落地環(huán)境
3 以太坊私有網(wǎng)絡(luò) PrivateNetwork
以太坊的私有網(wǎng)絡(luò),顧名思義就是由用戶自己通過Geth創(chuàng)建的私有網(wǎng)絡(luò),是一個(gè)非常適合開發(fā)、調(diào)試和測(cè)試的網(wǎng)絡(luò)
優(yōu)點(diǎn)
方便開發(fā)者深入理解以太坊的技術(shù)底層?
因?yàn)楣?jié)點(diǎn)相對(duì)較少,速度較快?
用戶可以隨時(shí)創(chuàng)建,隨時(shí)銷毀,隨時(shí)重建一個(gè)以太坊網(wǎng)絡(luò)?
隨意的增加節(jié)點(diǎn)數(shù)目,或者刪除節(jié)點(diǎn),?
既可以在服務(wù)器上建立,也可以在自己的windows或者M(jìn)ac機(jī)器上建立,?
甚至一臺(tái)機(jī)器可以建立多個(gè)節(jié)點(diǎn),在一臺(tái)機(jī)器上實(shí)現(xiàn)多節(jié)點(diǎn)的私有網(wǎng)絡(luò)。?
缺點(diǎn)
因?yàn)椴皇侨蚧?#xff0c;只有在私有網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)才能查看智能合約的執(zhí)行、調(diào)用等。
**
二、實(shí)戰(zhàn)搭建私有網(wǎng)絡(luò)?
我們將實(shí)戰(zhàn)如何使用 Geth 搭建以太坊的私有網(wǎng)絡(luò)。Geth的全稱是go-ethereum,是一個(gè)以太坊客戶端,用go語言編寫,應(yīng)該是目前最常用的客戶端。當(dāng)然以太坊客戶端還有用C++,Ruby,Python,Java等其他多種語言編寫的,不同類型的客戶端是為了滿足不同的需求場(chǎng)景。今天我們主要來介紹geth(發(fā)音同guess )的使用。?
下面的Geth實(shí)戰(zhàn),在Ubuntu 下進(jìn)行
Step 1: 建立目錄和genesis.json
在命令行模式創(chuàng)建一個(gè)目錄,例如tmpPrivate?
創(chuàng)建文件genesis.json, 并填入如下內(nèi)容。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Step 2: 執(zhí)行命令,創(chuàng)建區(qū)塊
切換回命令行,執(zhí)行命令,制造區(qū)塊
geth --datadir "./" init genesis.json- 1
如發(fā)現(xiàn) geth 未安裝,則先進(jìn)行安裝:
https://ethereum.github.io/go-ethereum/install/#install-on-ubuntu-via-ppas
具體安裝:?
Install from a package manager
Install on Ubuntu via PPAs
The simplest way to install go-ethereum on Ubuntu distributions is via the built in launchpad PPAs (Personal Package Archives). We provide a single PPA repository that contains both our stable as well as our develop releases for Ubuntu versions trusty, wily, xenial and yakkety.
To enable our launchpad repository please run:
sudo add-apt-repository -y ppa:ethereum/ethereum- 1
After that you can install the stable version of Go Ethereum:
sudo apt-get update sudo apt-get install ethereum- 1
- 2
Or the develop version via:
sudo apt-get update sudo apt-get install ethereum-unstable- 1
- 2
安裝后,執(zhí)行創(chuàng)造區(qū)塊命令:
geth --datadir "./" init genesis.json- 1
Step 3:創(chuàng)建自己的私有鏈條
執(zhí)行一條最簡(jiǎn)單的geth命令,來創(chuàng)建自己的私有鏈條
geth的參數(shù)項(xiàng)目很多,有興趣的可以打geth –help 來獲得詳細(xì)信息,我們也會(huì)在之后的章節(jié)中對(duì)關(guān)鍵參數(shù)項(xiàng)進(jìn)行說明。- 1
- 1
Step 4:在自己的私有鏈條上創(chuàng)建用戶
輸入命令eth.accounts, 我們會(huì)發(fā)現(xiàn)返回值為[]?
這是因?yàn)榇藭r(shí)雖然以太坊的私有鏈已經(jīng)被創(chuàng)造出來,但還沒有任何賬戶。
輸入命令personal.newAccount(“xxx”), 該命令將創(chuàng)造一個(gè)新的用戶,該用戶的密碼是xxx. 當(dāng)然用戶也可以將xxx 改為123,或者123456,或者任意密碼?
再次輸入命令 eth.accounts, 我們會(huì)發(fā)現(xiàn)一個(gè)新的用戶被創(chuàng)建了出來,這就代表我們已經(jīng)創(chuàng)建了一個(gè)賬戶,重復(fù)personal.newAccount() & eth.accounts 我們可以創(chuàng)建若干個(gè)賬戶出來
Step 5: 輸出區(qū)塊鏈的Log
在Step 3中,我們執(zhí)行的代碼
geth --datadir "./" --nodiscover console 2>>geth.log- 1
其中的代碼 console 2>> geth.log 代表將控制臺(tái)的一部分輸出,輸出到文件geth.log上去。
打開另一個(gè)終端,找到geth.log的所在目錄,執(zhí)行命令 tail -f geth.log 從而持續(xù)的輸出以太坊的日志?
整個(gè)過程如下圖所示:?
Step 6: 最重要的一步來了,開始挖礦!
在命令行中執(zhí)行命令 miner.start(), 開始在我們的區(qū)塊鏈上進(jìn)行挖礦?
此時(shí)Geth.log的輸出應(yīng)該是這樣的
一直等到100%。這個(gè)以太坊私有鏈就會(huì)正式啟動(dòng),并持續(xù)不斷的生成出以太坊來。
注意點(diǎn):?
1. 挖礦挖到的ether幣會(huì)默認(rèn)保在第一個(gè)賬戶中,即eth.acccounts[0]中。
挖礦是執(zhí)行智能合約的基礎(chǔ)。如果停止挖礦的話,不僅以太幣會(huì)停止生成,所有智能合約的調(diào)用也會(huì)不起作用。
如果真的要停止挖礦,可以執(zhí)行命令miner.stop()來停止挖礦
按上面的命令,應(yīng)該是可以實(shí)現(xiàn)以太坊挖礦的。如果不行的話,有可能就是之前有存在的鏈,此時(shí)應(yīng)該刪除之前的數(shù)據(jù)。在Mac下即刪除~/.ethash文件夾和里面的文件即可
Step 7: 最終當(dāng)挖礦啟動(dòng)的時(shí)候的日志是這樣的?
Step 8: 挖礦啟動(dòng)后,查看主賬戶的以太幣數(shù)量
acc0 = eth.accounts[0] eth.getBalance(acc0)- 1
- 2
結(jié)果只要不為0,那就說明挖礦成功!?
http://www.8btc.com/eth-privatenetwork-testnet?
https://ethereum.github.io/go-ethereum/install/#install-on-ubuntu-via-ppas
原文地址:?http://blog.csdn.net/niekai01/article/details/65679843
總結(jié)
以上是生活随笔為你收集整理的区块链实践(一) 以太坊网络+geth搭建私有网络实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链学堂(7):Geth 搭建私有网络
- 下一篇: 【附代码】如何在私有链上编写、部署与以太