ethereum入門(mén)--GoEthereum環(huán)境搭建-創(chuàng)新互聯(lián)

Go Ethereum簡(jiǎn)介

Go Ethereum是以太坊協(xié)議的三個(gè)原始實(shí)現(xiàn)(以及C ++和Python)之一。 它是用Go編寫(xiě)的,完全開(kāi)放源代碼并在GNU LGPL v3下獲得許可。
Go Ethereum可以作為獨(dú)立的客戶端Geth使用,您可以將其安裝在任何操作系統(tǒng)上,也可以作為可以嵌入Go,Android或iOS項(xiàng)目的庫(kù)。

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)雙河免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。搭建基于以太坊go-ethereum的環(huán)境 1.安裝go-ethereum

在這里只介紹在Ubuntu環(huán)境下的源碼安裝,執(zhí)行以下操作

  • 安裝Go環(huán)境
    可以參考go官方安裝文檔 https://golang.org/doc/install
  • 下載go-ethereum源代碼:
    go get -d github.com/ethereum/go-ethereum
  • 編譯生成可執(zhí)行文件,可執(zhí)行文件在$GOPATH/bin目錄下
    go install github.com/ethereum/go-ethereum/cmd/geth
2.啟動(dòng)go_ethereum 連接以太坊網(wǎng)絡(luò)啟動(dòng)方式(以太坊網(wǎng)絡(luò)上的完整節(jié)點(diǎn))

geth缺省會(huì)連接到以太坊官方的正式網(wǎng)絡(luò)上去,這個(gè)正式網(wǎng)絡(luò)里的區(qū)塊目前已經(jīng)有多達(dá)500多萬(wàn)塊,而且里面跑的都是要花真金白銀的交易

$ geth console

該命令將:

  • 在快速同步模式下啟動(dòng)geth(默認(rèn)情況下,可以使用--syncmode標(biāo)志進(jìn)行更改)
  • 啟動(dòng)Geth的內(nèi)置交互式JavaScript控制臺(tái)(通過(guò)尾部控制臺(tái)子命令),通過(guò)它可以調(diào)用所有官方web3方法以及Geth自己的管理API。 這也是可選的,如果你把它放在外面,你可以使用geth attach附加到已經(jīng)運(yùn)行的Geth實(shí)例。
  • 日志級(jí)別控制
    使用–verbosity可以控制日志級(jí)別,如不想看到日志還可以使用:
    $ geth --verbosity 0 console
開(kāi)發(fā)環(huán)境啟動(dòng)方式(以太坊測(cè)試網(wǎng)絡(luò)上的完整節(jié)點(diǎn))

向開(kāi)發(fā)人員過(guò)渡時(shí),如果您想要?jiǎng)?chuàng)建以太坊合約,幾乎可以肯定的是,除非您掌握整個(gè)系統(tǒng),否則不需要真正的資金。 換句話說(shuō),您不想連接到主網(wǎng)絡(luò),而想要加入與您的節(jié)點(diǎn)相連的測(cè)試網(wǎng)絡(luò),該節(jié)點(diǎn)完全等同于主網(wǎng)絡(luò),但僅限于Play-Ether。

$ geth --testnet console

控制臺(tái)子命令具有與上述完全相同的含義,它們?cè)跍y(cè)試網(wǎng)上也同樣有用。然而,指定--testnet標(biāo)志會(huì)重新配置你的Geth實(shí)例:

  • 取而代之的是使用默認(rèn)數(shù)據(jù)目錄(例如Linux上的?/ .ethereum),Geth將自己嵌入到testnet子文件夾的更深層次(Linux上的?/ .ethereum / testnet)。請(qǐng)注意,在OSX和Linux上,這也意味著附加到正在運(yùn)行的testnet節(jié)點(diǎn)需要使用自定義端點(diǎn),因?yàn)槟J(rèn)情況下,geth attach會(huì)嘗試附加到生產(chǎn)節(jié)點(diǎn)端點(diǎn)。例如。 geth attach <datadir> /testnet/geth.ipc。 Windows用戶不受此影響。
  • 客戶端不會(huì)連接以太網(wǎng)主要網(wǎng)絡(luò),而是連接到測(cè)試網(wǎng)絡(luò),測(cè)試網(wǎng)絡(luò)使用不同的P2P引導(dǎo)節(jié)點(diǎn),不同的網(wǎng)絡(luò)ID和生成狀態(tài)。
    注意:盡管有一些內(nèi)部保護(hù)措施可以防止交易在主網(wǎng)絡(luò)和測(cè)試網(wǎng)絡(luò)之間交換,但您應(yīng)該確保始終使用單獨(dú)的帳戶進(jìn)行游戲幣和真實(shí)資金。除非您手動(dòng)移動(dòng)賬戶,否則Geth將默認(rèn)正確分離兩個(gè)網(wǎng)絡(luò),并且不會(huì)在它們之間建立任何賬戶。
連接權(quán)威測(cè)試網(wǎng)絡(luò)方式啟動(dòng) ( Rinkeby測(cè)試網(wǎng)絡(luò)上的完整節(jié)點(diǎn))

上述測(cè)試網(wǎng)絡(luò)是基于ethash工作證明共識(shí)算法的跨客戶端網(wǎng)絡(luò)。 因此,由于網(wǎng)絡(luò)的低難度/安全性,它具有一定的額外開(kāi)銷并且更容易受到重組***。 Go Ethereum還支持連接到稱為Rinkeby的權(quán)威證明測(cè)試網(wǎng)絡(luò)(由社區(qū)成員運(yùn)營(yíng))。 這個(gè)網(wǎng)絡(luò)更輕,更安全,但只受到以太坊的支持。

$ geth --rinkeby --datadir=path/to/your/databases/and/keystore --syncmode=fast  --rpc console
  • --rinkeby:以太網(wǎng)測(cè)試網(wǎng)絡(luò)
  • --datadir: 數(shù)據(jù)庫(kù)和密鑰庫(kù)的數(shù)據(jù)目錄
  • --syncmode: geth有3種同步數(shù)據(jù)的方式,分別是full, fast和light。這三種方式中,full全同步是最慢的一種,它要把從創(chuàng)世區(qū)塊往下的所有區(qū)塊全部同步并校驗(yàn)一遍,fast快速同步模式相對(duì)于full來(lái)說(shuō)要快一些,它只校驗(yàn)最近的1024個(gè)區(qū)塊,而light模式是最快的,因?yàn)樗恍r?yàn)最近的一個(gè)狀態(tài),geth的缺省同步方式是fast,在rinkeby上目前有180多萬(wàn)個(gè)區(qū)塊的情況下,同步的時(shí)間大約需要半個(gè)小時(shí)到2個(gè)小時(shí),所以這里還是需要有一點(diǎn)耐心的。指定同步模式的命令如下:
    *--rpc: 為了能讓我們的應(yīng)用軟件能夠連接上geth,還需要在啟動(dòng)geth的同時(shí)啟動(dòng)rpc服務(wù)器
    參數(shù)名稱 參數(shù)描述
  • identity 區(qū)塊鏈的標(biāo)示,隨便填寫(xiě),用于標(biāo)示目前網(wǎng)絡(luò)的名字
  • init 指定創(chuàng)世塊文件的位置,并創(chuàng)建初始?jí)K
  • datadir 設(shè)置當(dāng)前區(qū)塊鏈網(wǎng)絡(luò)數(shù)據(jù)存放的位置
  • port 網(wǎng)絡(luò)監(jiān)聽(tīng)端口
  • networkid 設(shè)置當(dāng)前區(qū)塊鏈的網(wǎng)絡(luò)ID,用于區(qū)分不同的網(wǎng)絡(luò),是一個(gè)數(shù)字
  • console 啟動(dòng)命令行模式,可以在Geth中執(zhí)行命令

示例 :

$geth --rinkeby --datadir=$HOME/rinkeby --syncmode=fast --rpc --ethstats='KenmyZhang:Respect my authoritah!@stats.rinkeby.io'

注意:這里的KenmyZhang是給我的機(jī)器起的名字,你需要改變成一個(gè)不會(huì)和別人重復(fù)的名字,否則會(huì)出錯(cuò)誤,而后面不需要改動(dòng),這個(gè)Respect my authoritah!是密碼,通用的,無(wú)需改動(dòng);成功運(yùn)行起來(lái)后可以在https://www.rinkeby.io/#stats 查看到你的機(jī)器

配置替代flag啟動(dòng)方式

使用dumpconfig子命令來(lái)導(dǎo)出你現(xiàn)有的配置:

$ geth --rinkeby --datadir=path/to/your/databases/and/keystore --syncmode=fast --rpc  dumpconfig > ~/your_config.toml

這樣以后我們?cè)賵?zhí)行的時(shí)候,就直接執(zhí)行

$ geth --config /path/to/your_config.toml

注意:這只適用于geth v1.6.0及以上版本。

Docker快速啟動(dòng)方式
docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
       -p 8545:8545 -p 30303:30303 \
       ethereum/client-go

這將在快速同步模式下啟動(dòng),具有1GB的DB內(nèi)存容量,就像上述命令一樣。 它還會(huì)在您的主目錄中創(chuàng)建一個(gè)永久卷,以保存您的區(qū)塊鏈以及映射默認(rèn)端口。 還有一個(gè)alpine標(biāo)簽可用于圖像的纖細(xì)版本。

如果您想從其他容器和/或主機(jī)訪問(wèn)RPC,請(qǐng)不要忘記--rpcaddr 0.0.0.0。 默認(rèn)情況下,geth綁定到本地接口,RPC端點(diǎn)無(wú)法從外部訪問(wèn)。

以編程方式連接Geth節(jié)點(diǎn)

作為一名開(kāi)發(fā)人員,不久后你會(huì)想通過(guò)自己的程序開(kāi)始與Geth和Ethereum網(wǎng)絡(luò)進(jìn)行交互,而不是通過(guò)控制臺(tái)手動(dòng)進(jìn)行交互。 為了解決這個(gè)問(wèn)題,Geth建立了對(duì)基于JSON-RPC的API(標(biāo)準(zhǔn)API和Geth特定API)的支持。 這些可以通過(guò)HTTP,WebSockets和IPC(基于unix的平臺(tái)上的unix套接字,以及Windows上的命名管道)公開(kāi)。

IPC接口默認(rèn)啟用并公開(kāi)Geth支持的所有API,而HTTP和WS接口需要手動(dòng)啟用,并且由于安全原因而僅公開(kāi)一部分API。 這些可以打開(kāi)/關(guān)閉,并按照您的設(shè)定進(jìn)行配置

基于HTTP的JSON-RPC API選項(xiàng):
--rpc 啟用HTTP-RPC服務(wù)器
--rpcaddr HTTP-RPC服務(wù)器偵聽(tīng)接口(默認(rèn)值:“l(fā)ocalhost”)
--rpcport HTTP-RPC服務(wù)器偵聽(tīng)端口(默認(rèn)值:8545)
--rpcapi 通過(guò)HTTP-RPC接口提供的API(默認(rèn):“eth,net,web3”)
--rpccorsdomain 逗號(hào)分隔的接受跨源請(qǐng)求的域列表(瀏覽器強(qiáng)制執(zhí)行)
--ws啟用WS-RPC服務(wù)器
--wsaddr WS-RPC服務(wù)器監(jiān)聽(tīng)接口(默認(rèn)值:“l(fā)ocalhost”)
--wsport WS-RPC服務(wù)器偵聽(tīng)端口(默認(rèn)值:8546)
--wsapi 通過(guò)WS-RPC接口提供的API(默認(rèn):“eth,net,web3”)
--wsorigins接受websockets請(qǐng)求的起源
--ipcdisable禁用IPC-RPC服務(wù)器
--ipcapi 通過(guò)IPC-RPC接口提供的API(默認(rèn)值:“admin,debug,eth,miner,net,personal,shh,txpool,web3”)
--ipcpath數(shù)據(jù)區(qū)中IPC套接字/管道的文件名(顯式路徑將其轉(zhuǎn)義)
您需要使用您自己的編程環(huán)境的功能(庫(kù),工具等)通過(guò)HTTP,WS或IPC連接到配置有上述標(biāo)志的Geth節(jié)點(diǎn),并且您需要在所有傳輸中說(shuō)出JSON-RPC。您可以對(duì)多個(gè)請(qǐng)求重復(fù)使用相同的連接!

注意:請(qǐng)理解在此之前打開(kāi)基于HTTP / WS的傳輸所帶來(lái)的安全隱患!互聯(lián)網(wǎng)上的***正在積極嘗試用暴露的API來(lái)顛覆以太節(jié)點(diǎn)!此外,所有瀏覽器選項(xiàng)卡都可以訪問(wèn)本地運(yùn)行的Web服務(wù)器,因此惡意網(wǎng)頁(yè)可能會(huì)嘗試顛覆本地可用的API!

實(shí)戰(zhàn)- 從零開(kāi)始搭建以太坊私有網(wǎng)絡(luò)

維護(hù)您自己的專用網(wǎng)絡(luò)更為重要,因?yàn)楣俜骄W(wǎng)絡(luò)中許多理所當(dāng)然的配置需要手動(dòng)設(shè)置。

定義私有創(chuàng)世紀(jì)狀態(tài)

首先,您需要?jiǎng)?chuàng)建您的網(wǎng)絡(luò)的創(chuàng)世紀(jì)狀態(tài),所有節(jié)點(diǎn)都需要了解并達(dá)成一致。 這包含一個(gè)小JSON文件(例如,將其稱為genesis.json):

{
        "config": {
                    "chainId": 0,
                    "homesteadBlock": 0,
                    "eip155Block": 0,
                    "eip158Block": 0
            },
        "alloc"      : {},
        "coinbase"   : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x20000",
        "extraData"  : "",
        "gasLimit"   : "0x2fefd8",
        "nonce"      : "0x0000000000000042",
        "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp"  : "0x00"
    }

上述字段對(duì)于大多數(shù)目的應(yīng)該沒(méi)問(wèn)題,但我們建議將隨機(jī)數(shù)更改為某個(gè)隨機(jī)值,以防止未知的遠(yuǎn)程節(jié)點(diǎn)能夠連接到您。 如果您想預(yù)先為某些帳戶提供資金以便于測(cè)試,則可以使用帳戶配置填充alloc字段:

"alloc": {
    "0x0000000000000000000000000000000000000001": {"balance": "111111111"},
    "0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}

在上面的JSON文件中定義了Geneis狀態(tài)之后,您需要在啟動(dòng)每個(gè)Geth節(jié)點(diǎn)之前初始化它,以確保正確設(shè)置所有區(qū)塊鏈參數(shù):

$ geth --datadir=path/to/your/databases/and/keystore  init path/to/genesis.json 
--datadir數(shù)據(jù)庫(kù)和密鑰庫(kù)的數(shù)據(jù)目錄,默認(rèn)是在“~/.ethereum”

方法二:在執(zhí)行啟動(dòng)命令的參數(shù)中添加以下參數(shù)

--datadir=path/to/your/databases/and/keystore init path/to/genesis.json

附-參數(shù)詳解:

mixhash:    與nonce配合用于挖礦,由上一個(gè)區(qū)塊的一部分生成的hash。注意他和nonce的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
    nonce:  nonce就是一個(gè)64位隨機(jī)數(shù),用于挖礦,注意他和mixhash的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
    difficulty: 設(shè)置當(dāng)前區(qū)塊的難度,如果難度過(guò)大,cpu挖礦就很難,這里設(shè)置較小難度
    alloc:  用來(lái)預(yù)置賬號(hào)以及賬號(hào)的以太幣數(shù)量,因?yàn)樗接墟溚诘V比較容易,所以我們不需要預(yù)置有幣的賬號(hào),需要的時(shí)候自己創(chuàng)建即可以。
    coinbase:   礦工的賬號(hào),隨便填
    timestamp:  設(shè)置創(chuàng)世塊的時(shí)間戳
    parentHash: 上一個(gè)區(qū)塊的hash值,因?yàn)槭莿?chuàng)世塊,所以這個(gè)值是0
    extraData:  附加信息,隨便填,可以填你的個(gè)性信息
    gasLimit:   該值設(shè)置對(duì)GAS的消耗總量限制,用來(lái)限制區(qū)塊能包含的交易信息總和,因?yàn)槲覀兪撬接墟?,所以填大?/code>
創(chuàng)建會(huì)合點(diǎn)

所有要運(yùn)行的節(jié)點(diǎn)都初始化為所需的創(chuàng)世紀(jì)狀態(tài),則需要啟動(dòng)引導(dǎo)程序節(jié)點(diǎn),其他人可以使用它來(lái)在網(wǎng)絡(luò)中和/或通過(guò)互聯(lián)網(wǎng)找到彼此。方法是配置和運(yùn)行專用的引導(dǎo)節(jié)點(diǎn):

$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key
INFO [03-06|17:35:12] UDP listener up                          self=enode://4cd15426a69ebf094a1cdeda9e6c987752c1108d87bcc6331be10f464e0c5d9e14197495584e58a986d933ad5a39da5fa1dfa84b7f793b4bde94e1578bfaf57e@[::]:3030

在bootnode聯(lián)機(jī)的情況下,它會(huì)顯示一個(gè)enode URL,其他節(jié)點(diǎn)可以使用它來(lái)連接它并交換對(duì)等信息。確保使用外部可訪問(wèn)的IP替換顯示的IP地址信息(最可能是[::])以獲取實(shí)際的enode URL。
注意:您也可以使用完全成熟的Geth節(jié)點(diǎn)作為引導(dǎo)節(jié)點(diǎn),但這是不太推薦的方式。

  • 以太坊節(jié)點(diǎn)可以用URL方案“enode”來(lái)描述。

    十六進(jìn)制節(jié)點(diǎn)ID編碼在URL的用戶名部分,與主機(jī)通過(guò)@符號(hào)分隔。 主機(jī)名只能作為IP地址給出,不允許DNS域名。 主機(jī)名部分的端口是TCP偵聽(tīng)端口。 如果TCP和UDP(發(fā)現(xiàn))端口不同,則將UDP端口指定為查詢參數(shù)“discport”。

在以下示例中,節(jié)點(diǎn)URL描述了IP地址為10.3.58.6,TCP監(jiān)聽(tīng)端口30303和UDP發(fā)現(xiàn)端口30301的節(jié)點(diǎn)。

enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303 discport=30301
enode url方案由Node發(fā)現(xiàn)協(xié)議使用,可用于客戶端的bootnodes命令行選項(xiàng)或作為JSRE中的suggestPeer(nodeURL)函數(shù)的參數(shù)。

啟動(dòng)您的成員節(jié)點(diǎn)

在bootnode運(yùn)行并可從外部訪問(wèn)的情況下(您可以嘗試telnet <ip> <port>以確保它確實(shí)可以訪問(wèn)),請(qǐng)通過(guò)--bootnodes標(biāo)志啟動(dòng)每個(gè)后續(xù)Geth節(jié)點(diǎn),指向該對(duì)等方發(fā)現(xiàn)的bootnode。將私有網(wǎng)絡(luò)的數(shù)據(jù)目錄分開(kāi)可能也是可取的,所以也要指定一個(gè)自定義--datadir標(biāo)志。

$ geth -port=listenPort --datadir=path/to/your/databases/and/keystore --bootnodes=<bootnode-enode-url-from-above>

注意:由于您的網(wǎng)絡(luò)將與主網(wǎng)絡(luò)和測(cè)試網(wǎng)絡(luò)完全隔離,因此您還需要配置礦工來(lái)處理事務(wù)并為您創(chuàng)建新塊。

經(jīng)營(yíng)私人礦工

在公共以太坊網(wǎng)絡(luò)上進(jìn)行挖掘是一項(xiàng)復(fù)雜的任務(wù),因?yàn)樗荒苁褂肎PU,需要OpenCL或CUDA啟用的ethminer實(shí)例。有關(guān)這種設(shè)置的信息,請(qǐng)查看https://www.reddit.com/r/EtherMining/ 或者h(yuǎn)ttps://github.com/ethereum-mining/ethminer礦工資源庫(kù)。

但是,在專用網(wǎng)絡(luò)設(shè)置中,單個(gè)CPU采集器實(shí)例對(duì)于實(shí)際應(yīng)用來(lái)說(shuō)已經(jīng)足夠了,因?yàn)樗梢栽诓恍枰罅抠Y源的情況下以正確的時(shí)間間隔產(chǎn)生穩(wěn)定的數(shù)據(jù)塊流(考慮在單個(gè)線程上運(yùn)行,不需要多個(gè))。要為挖掘啟動(dòng)Geth實(shí)例,請(qǐng)使用所有通常的標(biāo)志運(yùn)行它,并通過(guò)擴(kuò)展:

$ geth <常見(jiàn)標(biāo)志> --mine --minerthreads = 1 --etherbase = 0x0000000000000000000000000000000000000000

這將在單個(gè)CPU線程上開(kāi)始挖掘塊和事務(wù),并將所有過(guò)程記錄到由--etherbase指定的帳戶。您可以通過(guò)將默認(rèn)氣體限制塊更改為(--targetgaslimit)并在(--gasprice)接受價(jià)格交易來(lái)進(jìn)一步調(diào)整采礦。

標(biāo)題名稱:ethereum入門(mén)--GoEthereum環(huán)境搭建-創(chuàng)新互聯(lián)
文章URL:http://bm7419.com/article44/dgodhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷推廣、網(wǎng)站設(shè)計(jì)、做網(wǎng)站、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)