在Ubuntu平台搭建以太坊私有鏈


要求:

在Ubuntu平台搭建以太坊私有鏈,並進行挖礦

 1、安裝go語言環境

(1)下載Linux下go的安裝包

wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

 (2)下載完后,進入到下載目錄,將其解壓到 /usr/local 文件夾下

sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

 

 

 在HOME下創建文件夾go

(3)配置環境變量

使用sudo vi ~/.bashrc命令編輯bashrc文件。

 

 

 將以下命令放入到bashrc文件中

export G0ROOT=/usr/1ocal/go
export GOBIN=$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOBIN

 

 

 使得環境變量生效

 

 此時go語言環境已經安裝完成,輸入go version查看安裝成功

 安裝geth環境

依次輸入以下代碼

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

 

 

 

 

 

 

  

 

 

 

 輸入geth -h檢查以下版本,說明geth客戶端安裝成功!

 

 

 2、安裝以太坊客戶端Ethereum

(1)新建一個文件夾,例如mydata,用來保存私有鏈的數據。創建一個初始化的創世塊文件genesis.json

 

 

 然后將如下的配置信息寫入到創世塊文件genesis.json中

{
  "nonce": "0x0000000000000042",
  "difficulty": "0x40000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
  "gasLimit": "0xffffffff",
  "alloc": {
    "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": {
      "balance": "1337000000000000000000"
    },
    "17961d633bcf20a7b029a7d94b7df4da2ec5427f": {
      "balance": "229427000000000000000"
    }
  },
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

 

 保存退出

 (2)初始化創世區塊,並指定數據存放路徑

 

 

 這里我用的老師給的創世區塊發現是錯誤的。

這里我將創世區塊換成以下內容:

{

  "config": {

    "chainId": 666,

    "homesteadBlock": 0,

    "eip150Block": 0,

    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",

    "eip155Block": 0,

    "eip158Block": 0,

    "byzantiumBlock": 0,

    "constantinopleBlock": 0,

    "petersburgBlock": 0,

    "istanbulBlock": 0,

    "ethash": {}

  },

  "nonce": "0x0",

  "timestamp": "0x5ddf8f3e",

  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "gasLimit": "0x47b760",

  "difficulty": "0x00002",

  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "coinbase": "0x0000000000000000000000000000000000000000",

  "alloc": { },

  "number": "0x0",

  "gasUsed": "0x0",

  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"

}

編輯genesis.json保存並退出

 

 

現在正式開始初始化創世區塊,並指定數據存放路徑,這里放在我們剛剛建的文件夾mydata下

 

 

 (3)啟動私有鏈節點,並將日志輸入到mychain.log

 

geth --networkid 3 --datadir mydata --identity "mychain" --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --port 30303 --rpccorsdomain "*" --nodiscover console 2>>mychain.log

 以太坊私有鏈環境已經搭好,接下在進行簡單測試。

 

首先這里說一下,其實我這是第二次挖礦了,第一次開始挖礦都會返回null,其實是因為節點版本問題。
所以接下來我重新啟動私有鏈節點,在啟動geth命令行的時候需要添加這兩個參數:
geth
--datadir "./ethdev" --nodiscover console 2>>get.log --dev --dev. period 1 #添加--dev 參數,啟動的時候便產生了一個賬戶,並且已經挖礦有余額。

 

 

 

 

 4、測試

(1)創建新賬戶

創建新用戶之前查看當前賬戶

 

 這里是因為我們添加-dev參數后就會自動添加一個賬戶,並且這個賬戶是有挖礦余額的。

 

接下來開始創建我們需要挖礦的賬戶

personal.newAccount("xixi1")      #這里的xixi1是賬戶的密碼

創建成功將返回賬戶的地址

(2)查找已創建的賬戶

> eth.accounts

> personal.listAccounts #兩者都可以查詢到已經創建的賬戶

 

 

 

(3)查詢賬戶余額

eth.getBalance("賬戶地址")

 這里查找我創建的第一個賬戶的余額,引號內輸入密碼為xixi1對應的賬戶地址0xc0fac76bfe99f3e68cdd630bd02e180560b6c7ba。

 可以看到顯示的是0,是因為我們還沒有開始挖礦,所以沒有余額。

#這里我將第一個用戶設置成user1,第二個用戶設置成user2,以便於后面好操作,不然老是去輸入用戶的地址很麻煩。

 

接下來直接可查詢user1和user2賬戶余額

 

 

(4)開始挖礦

在挖礦前,先設置挖礦獎勵地址(如果不設置的話默認獎勵地址為第一個用戶)

miner.setEtherbase(eth.accounts[0])    #這里的0是指的第一個賬戶,那么第二個賬戶就是1

 可以看到顯示true,說明第二個賬戶存在。

再查詢一下獎勵的地址

eth.coinbase

 可以看到正是我們第二個賬戶。

設置成功后,我們就開始挖礦,調大虛擬機內存,我這里設置的是4g。

 

其實在這之前我每次開始挖礦都會返回null,其實是因為節點版本問題。在啟動geth命令行的時候需要添加這兩個參數。
在dev環境下驗證發現,當執行miner.start()時,返回null。但其實miner已經執行,只不過它在等待你發送交易之后才會生成新的區塊。也就是說執行了miner.start(),它一直在等待,這是發送一筆交易,再查看區塊高度發現已經增加一塊。

 

 雖然miner.start 還是返回null,但是 eth.blockNumber 卻增長了,因此說明可以挖礦了。

(5)轉移以太幣

目的:將0.01以太幣從 user1 轉移到user2   轉移數量為0.01以太幣

 

amount = web3.toWei(0.01)                                  #首先需要設置轉移的以太幣數量amount

eth.sendTransaction({from:user1,to:user2,value:amount}) #將0.01以太幣從 user1 轉移到user2   轉移數量為0.01以太幣

 

 現在查詢user2的余額,發現不是0了!

 

 

注意:如果這里查詢到user2還是沒有余額,就說明沒有進行挖礦操作,以致於交易未成功。需要miner.start()開始挖礦,再查詢下區塊高度即可。挖礦之后就會有余額啦。

 再次轉移,可以看到user2余額發生變化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM