日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Mac环境搭建以太坊私有区块链进行挖矿模拟

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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

總結

以上是生活随笔為你收集整理的基于Mac环境搭建以太坊私有区块链进行挖矿模拟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。