真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

Go Ethereum簡介

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

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)雙河免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(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.啟動go_ethereum 連接以太坊網(wǎng)絡啟動方式(以太坊網(wǎng)絡上的完整節(jié)點)

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

$ geth console

該命令將:

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

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

$ geth --testnet console

控制臺子命令具有與上述完全相同的含義,它們在測試網(wǎng)上也同樣有用。然而,指定--testnet標志會重新配置你的Geth實例:

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

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

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

示例 :

$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 查看到你的機器

配置替代flag啟動方式

使用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快速啟動方式
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端點無法從外部訪問。

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

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

IPC接口默認啟用并公開Geth支持的所有API,而HTTP和WS接口需要手動啟用,并且由于安全原因而僅公開一部分API。 這些可以打開/關閉,并按照您的設定進行配置

基于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!

實戰(zhàn)- 從零開始搭建以太坊私有網(wǎng)絡

維護您自己的專用網(wǎng)絡更為重要,因為官方網(wǎng)絡中許多理所當然的配置需要手動設置。

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

首先,您需要創(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ū)塊能包含的交易信息總和,因為我們是私有鏈,所以填大。
創(chuàng)建會合點

所有要運行的節(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ù)。

啟動您的成員節(jié)點

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

$ geth -port=listenPort --datadir=path/to/your/databases/and/keystore --bootnodes=

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

經(jīng)營私人礦工

在公共以太坊網(wǎng)絡上進行挖掘是一項復雜的任務,因為它只能使用GPU,需要OpenCL或CUDA啟用的ethminer實例。有關這種設置的信息,請查看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)整采礦。


標題名稱:ethereum入門--GoEthereum環(huán)境搭建-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/dgodhe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部