基于Mac環境搭建以太坊私有區塊鏈進行挖礦模擬

第一步:相關軟件的安裝

  • go-ethereum客戶端安裝
  • Go-ethereum客戶端通常被稱為Geth,它是個命令行界面,執行在Go上實現的完整以太坊節點。Geth得益于Go語言的多平臺特性,支持在多個平臺上使用(比如Windows、Linux、Mac)。Geth是以太坊協議的具體落地實現,通過Geth,你可以實現以太坊的各種功能,如賬戶的新建編輯刪除,開啟挖礦,ether幣的轉移,智能合約的部署和執行等等。

Geth可以使用下面三種JSON RPC協議進行連接:

  • 內部進程通信(IPC):內部通訊,通常用于一臺電腦內。
  • 遠程程序調用(RCP):跨計算機的通訊。通常使用TCP和HTTP協議。
  • WS(Web sockets):使用sockets連接Geth。

chain ID含義:

  • chain ID:1 主網公鏈
  • chain ID:2 Morden網絡(僅對部分人開放)
  • chain ID:3 Ropsten網絡
  • chain ID:4 Rinkeby網絡
  • chain ID 大于4的是私有網絡
  • 使用Geth --testnet連接到Ropsten網絡,Geth --rinkeby連接到Rinkeby網絡。

安裝:

brew tap ethereum/ethereum
brew install ethereum
  • 也可以使用源碼安裝的方式
  • 以太坊github地址
  • 首先從github上下載以太坊的go-ethereum壓縮包,zip,或者單純使用命令行代碼,代碼如下
git clone https://github.com/ethereum/go-ethereum.git
  • ?如果是zip格式的需要解壓再執行命令,如果使用命令行,直接執行命令
cd go-ethereum
make geth

如果有問題?

  • cd到以太坊到目錄里面后,make geth出現錯誤,vi env.sh 查看文件屬性,按下esc,同時按shift和:,輸入冒號之后,輸入set ff,顯示文件的編碼格式,如果是dos,則是支持windows的,不支持linux
  • 需要將其改為支持linux的系統格式,輸入set ff=unix,保存退出
  • 再次運行,make geth

默認安裝地址

/usr/local/Cellar/ethereum/版本

我的顯示界面

  • 檢查是否安裝成功,輸入如下的命令
geth --help
  • ?出現如下的界面,即為安裝成功

  • 使用命令查看 版本號以及相關信息
geth version

?

第二步:搭建私有鏈

  • 以太坊支持自定義創世區塊,要運行私有鏈,我們就需要定義自己的創世區塊,創世區塊信息寫在一個json格式的配置文件中。首先將下面的內容保存到一個json文件中,一般以genesis.json進行命名。
  • 前提操作命令如下
mkdir myeth
cd myeth
vi genesis.json
  • json文件內容如下:直接復制即可。
{"config": {"chainId": 666999, "homesteadBlock": 0,"eip150Block": 0,"eip155Block": 0,"eip158Block": 0},"alloc"      : {},"coinbase"   : "0x0000000000000000000000000000000000000000","difficulty" : "0x20000","extraData"  : "","gasLimit"   : "0x2fefd8","nonce"      : "0x0000000000000042","mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp"  : "0x00"
}
  • 對于上面參數的解釋

  • 注意事項,我參考好多文章都缺失eip150Block:0這一句,這會出現錯誤。
  • 報錯情況為Failed to wirte genesis block:unsupported ordering

網絡初始化

  • 輸入geth init命令、genesis.json文件、存儲區塊數據和keystore的文件夾,進行初始化。
geth init "/Users/chy/Desktop/myeth/genesis.json" --datadir "/Users/chy/Desktop/myeth/chaindata"
  • 創世區塊已經產生了,Geth節點可以啟動了。Geth啟動時默認使用IPC協議,為了確保Geth節點可以通過PRC協議訪問,命令中需要帶上RPC參數?
  • 命令操作如下

?搭建節點運行的環境

geth --datadir "/Users/chy/Desktop/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 666999 –allow-insecure-unlock
  • 對于命令的講解
  • –datadir:指定區塊鏈數據的存儲位置;這個需要大家根據實際的情況進行調整,進行自己路徑的替換
  • –rpc:表示開啟 HTTP-RPC 服務;
  • –rpcapi “eth,web3,miner,admin,personal,net” :這個命令指示了允許通過RPC訪問的命令。默認情況下,Geth允許web3。
  • –nodiscover:關閉節點發現機制,防止加入有同樣初始配置的陌生節點;
  • –identity:指定節點 ID,方便在一大群節點中識別出自己的節點;
  • –rpcport:指定 HTTP-RPC 服務監聽端口號(默認為 8545);
  • –rpcaddr:指定IP地址;
  • –port:指定和其他節點連接所用的端口號(默認為 30303);
  • –maxpeers 0 如果你不想有人連上你的測試鏈,就用maxpeers 0。或者,你可以調整參數,當你確切的知道有幾個節點要連接上來的時候。
  • 使用不使用命令–allow-insecure-unlock在解鎖的時候就會報錯Error: account unlock with HTTP access is forbidden,原來是出于安全考慮,默認禁止了HTTP通道解鎖賬戶,相關問題參考
  • 執行完上面的命令又發現報錯Fatal: Error starting protocol stack: datadir already used by another process這個問題是因為,需要強制關閉正在運行的geth進程。?命令如下:54148為geth進程的ID號
  • 再次加上參數–allow-insecure-unlock,重新啟動私有鏈。現在執行解鎖賬戶命令即可成功了。

  • geth相關命令

geth --datadir "/Users/chy/Desktop/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 666999 --allow-insecure-unlock
ps aux | grep "geth"
kill -9 54148
  • enode的信息是節點在網絡上的身份標志。如果其他節點準備加入這個網絡中,就需要提供自己的enode值。RPC訪問可以通過http://127.0.0.1:8545或http://localhost:8545,IPC訪問可以通過**\.\pipe\geth.ipc**命令。命令是以服務的形式持續運行的,需要再打開一個命令行窗口但是原先的窗口不可以關閉。輸入命令如下:

geth attach rpc:http://localhost:8545
  • 也可以在啟動的時候,加入console,啟動一個端口(簡單的例子)
  • 或者是第二次啟動時候,輸入如下命令
  • 注意,這里 . 代表當前的文件夾,也就是上文指定的"/Users/chy/Desktop/myeth/chaindata",否則相關命令無法操作,雖然不報錯,但是得不到預期的結果。
geth --datadir . --networkid 666999 console
  • 可以將輸出的Info信息重定向到 output.log?文件里面,2是指Linux里面的shell,output.log會存儲到當前的文件夾
geth --datadir . --networkid 666999 console 2>output.log
  • 使用命令,如下所示,時時跟蹤輸出日志的變化?
tail -f output.log
  • 注意:如果gath的版本較低,那么重新啟動區塊鏈的時候,數據丟失?
  • 出現如下頁面,進入控制頁面。使用IPC協議連接到節點上,這樣即可執行其他命令。

交互式執行環境

  • 這是一個交互式的 JavaScript 執行環境,在這里面可以執行 JavaScript 代碼,其中 > 是命令提示符。在這個環境里也內置了一些用來操作以太坊的 JavaScript 對象,可以直接使用這些對象。這些對象主要包括:
  • eth:包含一些跟操作區塊鏈相關的方法;
  • net:包含一些查看p2p網絡狀態的方法;
  • admin:包含一些與管理節點相關的方法;
  • miner:包含啟動和停止挖礦的一些方法;
  • personal:主要包含一些管理賬戶的方法;
  • txpool:包含一些查看交易內存池的方法;
  • web3:包含了以上對象,還包含一些單位換算的方法。

常用命令:

  • personal.newAccount():創建賬戶;
  • personal.unlockAccount():解鎖賬戶;
  • eth.accounts:枚舉系統中的賬戶;
  • eth.getBalance():查看賬戶余額,返回值的單位是 Wei(Wei 是以太坊中最小貨幣面額單位,類似比特幣中的聰,1 ether = 10^18 Wei);
  • eth.blockNumber:列出區塊總數;
  • eth.getTransaction():獲取交易;
  • eth.getBlock():獲取區塊;
  • miner.start():開始挖礦;
  • miner.stop():停止挖礦;
  • web3.fromWei():Wei 換算成以太幣;
  • web3.toWei():以太幣換算成 Wei;
  • txpool.status:交易池中的狀態;
  • admin.addPeer():連接到其他節點;

第三步:設置賬戶

  • 連接到Geth節點后,接下來需要設置coinbase或etherbase賬戶。創建賬戶可以使用personal對象的newAccout方法,并設置密碼(密碼不可見)。命令如下。
personal.newAccount()
  • 如果需要更改原有的coinbase賬戶地址,可以通過address.miner對象的setEtherBase函數進行操作。這個操作將使用新的賬戶替換原有的coinbase賬戶。命令如下
miner.setEtherbase("0x19b4029dad20824db6dc201437f9cac2a7e1fc5c")
  • 執行查詢命令,可看到設置的地址已經生效了。此時挖礦可以啟動了。由于只有一個礦工,將獲得全部的挖礦獎勵,coinbase賬戶的以太幣會逐步增加。
eth.coinbase
  • 同樣方法再創建一個賬戶
  • 查看當前的用戶
eth.accounts
  • 代碼執行如下

第四步:開始挖礦

  • start中的參數代表了用于挖礦的線程數量。命令如下
miner.start(8)
  • 這時切換到之前創建私有鏈的命令行窗口中,可以看到挖礦過程的輸出結果。這里是指我們當時創建的第一個窗口。

  • 如果是第一次挖礦,需要生成DAG相關文件,這個需要花費一定的時間。第二次以后就不需要了。

  • 因為我是第二次挖礦,所以沒有上面文件。

  • 當使用輸入日志的方式時,可以輸入命令tail -f geth.log 來跟蹤挖礦進度
  • 查看正在挖礦的賬戶0已經獲得的以太幣和未挖礦的賬戶1的以太幣余額。查看錢包的余額命令如下,將0改為1即可查看第二個賬戶的余額。
eth.getBalance(eth.accounts[0])
  • 執行情況如下:


?

  • 挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做coinbase,默認情況下coinbase是本地賬戶中的第一個賬戶。

  • getBalance()返回值的單位是wei,wei是以太幣的最小單位,1個以太幣=10的18次方個wei。要查看有多少個以太幣,可以用web3.fromWei()將返回值換算成以太幣

  • 停止挖礦,命令如下

miner.stop()
  • 整體操作布局,左邊動態監視用戶的輸入,右邊窗口為以太坊 Javascript Console。頁面布局如下

第五步:進行交易

  • 我們要從賬戶0到賬戶1轉賬,需要先解鎖賬戶才能轉賬,否則會報錯。
  • 解鎖命令如下
personal.unlockAccount(eth.accounts[0])
  • 發起交易,由賬戶0轉賬200以太幣到賬戶1,命令如下
personal.unlockAccount(eth.accounts[0])
amount = web3.toWei(200,'ether')
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
  • 此時交易已經提交到區塊鏈,返回了交易的hash,但還未被處理,本地交易池中有一個待確認的交易,可以使用 eth.getBlock(“pending”, true).transactions 查看當前待確認交易。
eth.getBlock("pending", true).transactions
  • 要使交易被處理,必須要挖礦。這里我們啟動挖礦,然后等待挖到一個區塊之后就停止挖礦。命令如下:

miner.start(1);admin.sleepBlocks(1);miner.stop();
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
  • 此時,交易已經生效,賬戶1應該已經收到了200個以太幣了。

參考文檔

給自己的小提示

  • account[0]的密碼是123456

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447248.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Springboot 添加server.servlet.context-path

Springboot 2.0變革后的配置區別 1、springboot 2.0之前,配置為 server.context-path 2、springboot 2.0之后,配置為 server.servlet.context-path

vs2015 支持Android arm neon Introducing Visual Studio’s Emulator for Android

visual studio 2015支持Android開發了。 Microsoft released Visual Studio 2015 Preview this week and with it you now have options for Android development. When choosing one of those Android development options, Visual Studio will also install the brand new Vi…

基于linux環境采用update-alternatives 方式進行python版本切換

采用update-alternatives 切換版本 update-alternatives是Debian提供的一個工具,通過鏈接的方式,但是其切換的過程非常方便。首先看一下update-alternatives的幫助信息: $ update-alternatives --help 用法:update-alternatives …

FFmpeg示例程序合集-批量編譯腳本

此前做了一系列有關FFmpeg的示例程序,組成了《 最簡單的FFmpeg示例程序合集》,其中包含了如下項目:simplest ffmpeg player: 最簡單的基于FFmpeg的視頻播放器simplest ffmpeg audio player: 最簡單的基于FFmpeg的音頻…

基于Ubuntu環境使用docker搭建對于中文識別的chineseocr_lite項目

光學字符識別(OCR) 光學字符識別(OCR)目前已經有了很廣泛的應用,很多開源項目都會嵌入OCR 來擴展原有的能力,例如身份證識別、出入停車場的車牌識別、拍照翻譯等等本文介紹的開源的中文 OCR 項目&#xff…

Ubuntu環境使用conda安裝輕量級中文ocr開源項目chineseocr_lite,最簡單的方式

問題 接使用docker的方式來創建項目所報的錯誤選中文件之后,界面不停的繞圈,顯示不了對于圖片的識別結果,并且監控界面上出現錯誤提示如下ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory&a…

基于Ubuntu使用docker的方式來搭建基于Yolo3+crnn的Chineseocr識別

Docker Docker簡單易用,具體的安裝和配置可以看我的或者其他人的博客 安裝完之后,輸入以下命令安裝chineseocr并且開啟服務 docker pull zergmk2/chineseocr docker run -d -p 8080:8080 zergmk2/chineseocr 在瀏覽器輸入http://127.0.0.1:8080/ocr網…

c/c++ 內存使用指南 和實踐指導

如果你完全理解如下內容, 請聯系我:szu030606163.com, 討論更深層次合作 。 1. 大內高手—內存模型 單線程模型 多線程模型 2. 大內高手—棧/堆 backtrace的實現 alloca的實現 可變參數的實現。 malloc/free系列函數簡介 new…

mininet 應用實踐

教學目的與學時建議 能夠運用 mininet 可視化工具創建計算機網絡拓撲結構能夠運用 mininet 交互界面創建拓撲結構能夠運用 python 腳本構建計算機網絡拓撲結構建議:2 學時 實驗環境 下載并安裝虛擬機 VMware workstation;下載虛擬機鏡像( S…

使用百度大腦,導入aip以及相應的庫文件報錯問題

參考文章 github鏈接地址 具體操作 pip install githttps://github.com/Baidu-AIP/python-sdk.gitmasterfrom aip import 對應服務即可

一個通用的makefile寫法,自動推導文件的依賴關系

溫習之用。 假設有兩個頭文件目錄 header1,header2;兩個cpp文件目錄,src1,src2,一個lib目錄 寫一個完整的makefile步驟如下: 1 定義可執行文件的名稱 TARGET MyPro 2 指定此編譯工程所要使用的頭文件所在的目錄 INC -I. -Iheader1 -Iheader2 3 指…

實現基于darknet框架實現CTPN版本自然場景文字檢測 與CNN+CTCOCR文字識別的ChineseOCR搭建

Github地址 Github源碼地址 支持系統:mac/ubuntu python3.6 實現功能 文字檢測; 文字識別; 支持GPU/CPU,CPU優化(opencv dnn) docker鏡像服務(CPU優化版本) 下載鏡像 鏈接:https://pan.baidu…

50個c/c++源代碼網站

C/C是最主要的編程語言。這里列出了50名優秀網站和網頁清單,這些網站提供c/c源代碼。這份清單提供了源代碼的鏈接以及它們的小說明。我已盡力包括最佳的C/C源代碼的網站。這不是一個完整的清單,您有建議可以聯系我,我將歡迎您的建議&#xff…

在服務器上搭建基于yolo3 與crnn 實現中文自然場景文字檢測及識別,GPU版本

Github地址 參考地址作者大人,十分熱心,對于我的問題,提供了大量的幫助,使我少走了很多的彎路,在此表示由衷的感謝 注意事項 使用nvidia-smi命令查看cuda的版本,必須是10.1或者10.0,10.2是萬萬…

python TypeError can only concatenate tuple not str to tuple

原因分析 這個錯誤出現是因為執行元組之間的合并例子 tuple1 ("str",1,["a","b","c"],4) tuple2 ("hello",) print(tuple1[0]) print (tuple1[1:3]) print (tuple1[1:]) print (tuple2 * 2) print (tuple1tuple2) 注意事…

23種設計模式 -比喻

1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory (下載源碼就到源碼網:…

python 版本2和3 在/取模方面的的差異

注意事項 python2 使用 /python3 使用 // 例子 二分法取數值 def binary_search(search_list,target):left 0right len(search_list) - 1while left < right:mid (left right) // 2if search_list[mid] < target:left mid 1continueif search_list[mid] target:r…

vc中調用其他應用程序的方法(函數) winexec,shellexecute ,createprocess

三個SDK函數: WinExec&#xff0c;ShellExecute &#xff0c;CreateProcess可以實現調用其他程序的要求&#xff0c;其中以WinExec最為簡單&#xff0c;ShellExecute比WinExec靈活一些&#xff0c;CreateProcess最為復雜。WinExec 兩個參數&#xff0c;前一個指定路徑&#xf…

算法入門篇 一 時間復雜度

時間復雜度 要求&#xff1a;只要高階項&#xff0c;不要低階項常數操作&#xff1a;操作花費的時間和數據量無關&#xff0c;比如數組尋址&#xff0c;直接利用偏移量找到對應元素的位置&#xff1b;非常數操作&#xff1a;比如list(鏈表)&#xff1b;查找元素需要遍歷鏈表&a…

遍歷文件夾下所有文件和文件夾

1 void find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLEhFind::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE hFind)  return;while(TRUE){if(FindFileData.dw…