Go Ethereum是以太坊協(xié)議的三個原始實現(xiàn)(以及C ++和Python)之一。 它是用Go編寫的,完全開放源代碼并在GNU LGPL v3下獲得許可。
Go Ethereum可以作為獨立的客戶端Geth使用,您可以將其安裝在任何操作系統(tǒng)上,也可以作為可以嵌入Go,Android或iOS項目的庫。
公司主營業(yè)務:成都網(wǎng)站制作、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出宏偉免費做網(wǎng)站回饋大家。
在這里只介紹在Ubuntu環(huán)境下的源碼安裝,執(zhí)行以下操作
geth缺省會連接到以太坊官方的正式網(wǎng)絡上去,這個正式網(wǎng)絡里的區(qū)塊目前已經(jīng)有多達500多萬塊,而且里面跑的都是要花真金白銀的交易
$ geth console
該命令將:
向開發(fā)人員過渡時,如果您想要創(chuàng)建以太坊合約,幾乎可以肯定的是,除非您掌握整個系統(tǒng),否則不需要真正的資金。 換句話說,您不想連接到主網(wǎng)絡,而想要加入與您的節(jié)點相連的測試網(wǎng)絡,該節(jié)點完全等同于主網(wǎng)絡,但僅限于Play-Ether。
$ geth --testnet console
控制臺子命令具有與上述完全相同的含義,它們在測試網(wǎng)上也同樣有用。然而,指定--testnet標志會重新配置你的Geth實例:
上述測試網(wǎng)絡是基于ethash工作證明共識算法的跨客戶端網(wǎng)絡。 因此,由于網(wǎng)絡的低難度/安全性,它具有一定的額外開銷并且更容易受到重組***。 Go Ethereum還支持連接到稱為Rinkeby的權(quán)威證明測試網(wǎng)絡(由社區(qū)成員運營)。 這個網(wǎng)絡更輕,更安全,但只受到以太坊的支持。
$ 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是給我的機器起的名字,你需要改變成一個不會和別人重復的名字,否則會出錯誤,而后面不需要改動,這個Respect my authoritah!是密碼,通用的,無需改動;成功運行起來后可以在https://www.rinkeby.io/#stats 查看到你的機器
使用dumpconfig子命令來導出你現(xiàn)有的配置:
$ geth --rinkeby --datadir=path/to/your/databases/and/keystore --syncmode=fast --rpc dumpconfig > ~/your_config.toml
這樣以后我們再執(zhí)行的時候,就直接執(zhí)行
$ geth --config /path/to/your_config.toml
注意:這只適用于geth v1.6.0及以上版本。
docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
-p 8545:8545 -p 30303:30303 \
ethereum/client-go
這將在快速同步模式下啟動,具有1GB的DB內(nèi)存容量,就像上述命令一樣。 它還會在您的主目錄中創(chuàng)建一個永久卷,以保存您的區(qū)塊鏈以及映射默認端口。 還有一個alpine標簽可用于圖像的纖細版本。
如果您想從其他容器和/或主機訪問RPC,請不要忘記--rpcaddr 0.0.0.0。 默認情況下,geth綁定到本地接口,RPC端點無法從外部訪問。
作為一名開發(fā)人員,不久后你會想通過自己的程序開始與Geth和Ethereum網(wǎng)絡進行交互,而不是通過控制臺手動進行交互。 為了解決這個問題,Geth建立了對基于JSON-RPC的API(標準API和Geth特定API)的支持。 這些可以通過HTTP,WebSockets和IPC(基于unix的平臺上的unix套接字,以及Windows上的命名管道)公開。
IPC接口默認啟用并公開Geth支持的所有API,而HTTP和WS接口需要手動啟用,并且由于安全原因而僅公開一部分API。 這些可以打開/關(guān)閉,并按照您的設定進行配置
基于HTTP的JSON-RPC API選項:
--rpc 啟用HTTP-RPC服務器
--rpcaddr HTTP-RPC服務器偵聽接口(默認值:“l(fā)ocalhost”)
--rpcport HTTP-RPC服務器偵聽端口(默認值:8545)
--rpcapi 通過HTTP-RPC接口提供的API(默認:“eth,net,web3”)
--rpccorsdomain 逗號分隔的接受跨源請求的域列表(瀏覽器強制執(zhí)行)
--ws啟用WS-RPC服務器
--wsaddr WS-RPC服務器監(jiān)聽接口(默認值:“l(fā)ocalhost”)
--wsport WS-RPC服務器偵聽端口(默認值:8546)
--wsapi 通過WS-RPC接口提供的API(默認:“eth,net,web3”)
--wsorigins接受websockets請求的起源
--ipcdisable禁用IPC-RPC服務器
--ipcapi 通過IPC-RPC接口提供的API(默認值:“admin,debug,eth,miner,net,personal,shh,txpool,web3”)
--ipcpath數(shù)據(jù)區(qū)中IPC套接字/管道的文件名(顯式路徑將其轉(zhuǎn)義)
您需要使用您自己的編程環(huán)境的功能(庫,工具等)通過HTTP,WS或IPC連接到配置有上述標志的Geth節(jié)點,并且您需要在所有傳輸中說出JSON-RPC。您可以對多個請求重復使用相同的連接!
注意:請理解在此之前打開基于HTTP / WS的傳輸所帶來的安全隱患!互聯(lián)網(wǎng)上的***正在積極嘗試用暴露的API來顛覆以太節(jié)點!此外,所有瀏覽器選項卡都可以訪問本地運行的Web服務器,因此惡意網(wǎng)頁可能會嘗試顛覆本地可用的API!
維護您自己的專用網(wǎng)絡更為重要,因為官方網(wǎng)絡中許多理所當然的配置需要手動設置。
首先,您需要創(chuàng)建您的網(wǎng)絡的創(chuàng)世紀狀態(tài),所有節(jié)點都需要了解并達成一致。 這包含一個小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"
}
上述字段對于大多數(shù)目的應該沒問題,但我們建議將隨機數(shù)更改為某個隨機值,以防止未知的遠程節(jié)點能夠連接到您。 如果您想預先為某些帳戶提供資金以便于測試,則可以使用帳戶配置填充alloc字段:
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}
在上面的JSON文件中定義了Geneis狀態(tài)之后,您需要在啟動每個Geth節(jié)點之前初始化它,以確保正確設置所有區(qū)塊鏈參數(shù):
$ geth --datadir=path/to/your/databases/and/keystore init path/to/genesis.json
--datadir數(shù)據(jù)庫和密鑰庫的數(shù)據(jù)目錄,默認是在“~/.ethereum”
方法二:在執(zhí)行啟動命令的參數(shù)中添加以下參數(shù)
--datadir=path/to/your/databases/and/keystore init path/to/genesis.json
附-參數(shù)詳解:
mixhash: 與nonce配合用于挖礦,由上一個區(qū)塊的一部分生成的hash。注意他和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
nonce: nonce就是一個64位隨機數(shù),用于挖礦,注意他和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
difficulty: 設置當前區(qū)塊的難度,如果難度過大,cpu挖礦就很難,這里設置較小難度
alloc: 用來預置賬號以及賬號的以太幣數(shù)量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創(chuàng)建即可以。
coinbase: 礦工的賬號,隨便填
timestamp: 設置創(chuàng)世塊的時間戳
parentHash: 上一個區(qū)塊的hash值,因為是創(chuàng)世塊,所以這個值是0
extraData: 附加信息,隨便填,可以填你的個性信息
gasLimit: 該值設置對GAS的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。
所有要運行的節(jié)點都初始化為所需的創(chuàng)世紀狀態(tài),則需要啟動引導程序節(jié)點,其他人可以使用它來在網(wǎng)絡中和/或通過互聯(lián)網(wǎng)找到彼此。方法是配置和運行專用的引導節(jié)點:
$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key
INFO [03-06|17:35:12] UDP listener up self=enode://4cd15426a69ebf094a1cdeda9e6c987752c1108d87bcc6331be10f464e0c5d9e14197495584e58a986d933ad5a39da5fa1dfa84b7f793b4bde94e1578bfaf57e@[::]:3030
在bootnode聯(lián)機的情況下,它會顯示一個enode URL,其他節(jié)點可以使用它來連接它并交換對等信息。確保使用外部可訪問的IP替換顯示的IP地址信息(最可能是[::])以獲取實際的enode URL。
注意:您也可以使用完全成熟的Geth節(jié)點作為引導節(jié)點,但這是不太推薦的方式。
以太坊節(jié)點可以用URL方案“enode”來描述。
十六進制節(jié)點ID編碼在URL的用戶名部分,與主機通過@符號分隔。 主機名只能作為IP地址給出,不允許DNS域名。 主機名部分的端口是TCP偵聽端口。 如果TCP和UDP(發(fā)現(xiàn))端口不同,則將UDP端口指定為查詢參數(shù)“discport”。
在以下示例中,節(jié)點URL描述了IP地址為10.3.58.6,TCP監(jiān)聽端口30303和UDP發(fā)現(xiàn)端口30301的節(jié)點。
enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303 discport=30301
enode url方案由Node發(fā)現(xiàn)協(xié)議使用,可用于客戶端的bootnodes命令行選項或作為JSRE中的suggestPeer(nodeURL)函數(shù)的參數(shù)。
在bootnode運行并可從外部訪問的情況下(您可以嘗試telnet
$ geth -port=listenPort --datadir=path/to/your/databases/and/keystore --bootnodes=
注意:由于您的網(wǎng)絡將與主網(wǎng)絡和測試網(wǎng)絡完全隔離,因此您還需要配置礦工來處理事務并為您創(chuàng)建新塊。
在公共以太坊網(wǎng)絡上進行挖掘是一項復雜的任務,因為它只能使用GPU,需要OpenCL或CUDA啟用的ethminer實例。有關(guān)這種設置的信息,請查看https://www.reddit.com/r/EtherMining/ 或者https://github.com/ethereum-mining/ethminer礦工資源庫。
但是,在專用網(wǎng)絡設置中,單個CPU采集器實例對于實際應用來說已經(jīng)足夠了,因為它可以在不需要大量資源的情況下以正確的時間間隔產(chǎn)生穩(wěn)定的數(shù)據(jù)塊流(考慮在單個線程上運行,不需要多個)。要為挖掘啟動Geth實例,請使用所有通常的標志運行它,并通過擴展:
$ geth <常見標志> --mine --minerthreads = 1 --etherbase = 0x0000000000000000000000000000000000000000
這將在單個CPU線程上開始挖掘塊和事務,并將所有過程記錄到由--etherbase指定的帳戶。您可以通過將默認氣體限制塊更改為(--targetgaslimit)并在(--gasprice)接受價格交易來進一步調(diào)整采礦。