Go Ethereum是以太坊協(xié)議的三個(gè)原始實(shí)現(xiàn)(以及C ++和Python)之一。 它是用Go編寫的,完全開放源代碼并在GNU LGPL v3下獲得許可。
Go Ethereum可以作為獨(dú)立的客戶端Geth使用,您可以將其安裝在任何操作系統(tǒng)上,也可以作為可以嵌入Go,Android或iOS項(xiàng)目的庫(kù)。
在這里只介紹在Ubuntu環(huán)境下的源碼安裝,執(zhí)行以下操作
geth缺省會(huì)連接到以太坊官方的正式網(wǎng)絡(luò)上去,這個(gè)正式網(wǎng)絡(luò)里的區(qū)塊目前已經(jīng)有多達(dá)500多萬(wàn)塊,而且里面跑的都是要花真金白銀的交易
$ geth console
該命令將:
向開發(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í)例:
上述測(cè)試網(wǎng)絡(luò)是基于ethash工作證明共識(shí)算法的跨客戶端網(wǎng)絡(luò)。 因此,由于網(wǎng)絡(luò)的低難度/安全性,它具有一定的額外開銷并且更容易受到重組***。 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
示例 :
$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)作為一名開發(fā)人員,不久后你會(huì)想通過(guò)自己的程序開始與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上的命名管道)公開。
IPC接口默認(rèn)啟用并公開Geth支持的所有API,而HTTP和WS接口需要手動(dòng)啟用,并且由于安全原因而僅公開一部分API。 這些可以打開/關(guān)閉,并按照您的設(shè)定進(jìn)行配置
基于HTTP的JSON-RPC API選項(xiàng):
--rpc 啟用HTTP-RPC服務(wù)器
--rpcaddr HTTP-RPC服務(wù)器偵聽接口(默認(rèn)值:“l(fā)ocalhost”)
--rpcport HTTP-RPC服務(wù)器偵聽端口(默認(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)聽接口(默認(rèn)值:“l(fā)ocalhost”)
--wsport WS-RPC服務(wù)器偵聽端口(默認(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)理解在此之前打開基于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)- 從零開始搭建以太坊私有網(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偵聽端口。 如果TCP和UDP(發(fā)現(xiàn))端口不同,則將UDP端口指定為查詢參數(shù)“discport”。
在以下示例中,節(jié)點(diǎn)URL描述了IP地址為10.3.58.6,TCP監(jiān)聽端口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ù)。
在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ù)目錄分開可能也是可取的,所以也要指定一個(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 <常見標(biāo)志> --mine --minerthreads = 1 --etherbase = 0x0000000000000000000000000000000000000000
這將在單個(gè)CPU線程上開始挖掘塊和事務(wù),并將所有過(guò)程記錄到由--etherbase指定的帳戶。您可以通過(guò)將默認(rèn)氣體限制塊更改為(--targetgaslimit)并在(--gasprice)接受價(jià)格交易來(lái)進(jìn)一步調(diào)整采礦。
標(biāo)題名稱:ethereum入門--GoEthereum環(huán)境搭建-創(chuàng)新互聯(lián)
文章URL:http://vcdvsql.cn/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)
猜你還喜歡下面的內(nèi)容