區塊鏈學習之3Windows平臺下以太坊私有鏈搭建及錢包部署和運行

在Windows下的安裝,是按着老師下發的安裝教程做的。由於前面有在Ubuntu搭建的經驗,所以感覺步驟大致相同,而且感覺Windows的簡單一些。


一、理論知識

1.區塊鏈中私鑰、公鑰和比特幣地址三者的關係

1.用戶首先會得到一個私鑰,私鑰是由程序調用操作系統自帶的一個算法模塊,在本地自動的生成的。
2.然後錢包這個應用會將這個私鑰通過橢圓曲線算法這個矩陣相乘,得到用戶的公鑰。因爲是與矩陣相乘,所以公鑰也是矩陣,橫向和縱向都是32位。
3.因爲公鑰十分複雜、不方便使用,所以又通過哈希函數得到了一個比特幣地址(也叫錢包地址)。

2.比特幣地址與傳統賬號的區別

1.相同點:
都是進行交易的一個支付轉賬的“憑證”。
2.不同點:
(1)比特幣地址是由區塊鏈網絡自發生成,而傳統賬號地址是由第三方機構生成。
(2)通過比特幣地址查詢到的是所有的轉賬記錄,而傳統賬號查詢到的是餘額。

3.爲什麼一開始只是轉賬提交成功,需要礦工挖到新的區塊才能算交易成功?

網上找了找相關的文章,我覺得下面這篇理解起來好懂一點:
https://www.zxbcc.com/ad/478

上面那篇文章講的是原理,然後用我的話總結一下結論:
我們可以把 [挖礦行爲] 理解爲 [爭奪記賬權] ,所以 [挖到礦] 就可以理解爲 [記了一筆賬] 。
所以當我們想要轉賬的時候,一開始只是把轉賬信息提交成功,需要挖到新的區塊,把這筆轉賬信息記到新的區塊裏,相當於 [把這筆賬記下] 以後,才能算真正的交易成功。

4.區塊鏈交易過程

假設Alice要向Bob轉一筆賬,那麼需要解決以下問題;
1.如何證明Alice有錢?
答:公鑰,通過公鑰哈希判斷出錢包地址是Alice的。

2.如何證明現在發起交易的是Alice?
答:數字簽名,驗證Alice的數字簽名。

3.如何防止Alice的錢被使用兩次(即“雙花”問題)?
答:打標籤(就像火車票檢票一樣)

在這裏插入圖片描述

二、實驗操作

1.環境準備

1.安裝Win10 虛擬機

這是官方的虛擬機下載地址:
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

然後選擇VMWare的就行:
在這裏插入圖片描述
然後直接導入就好:
在這裏插入圖片描述
開機密碼是 Passw0rd!

(虛擬機裏只有一個盤,C盤,所以接下來的實驗都是在C盤完成的;如果用物理機的話,可以放在D盤E盤裏)

2.安裝Ethereum-Wallet

1.在C盤新建文件夾 Eth,專門放置以太坊開發環境 :
2.把下載的Ethereum-Wallet-win64-0-8-10.zip壓縮包win-unpacked解壓到 C:\Eth 目錄下:

3.安裝geth

1.geth下載:https://ethereum.github.io/go-ethereum/downloads/
2.安裝geth,安裝在 C:\Eth 目錄下
3.在 C:\Eth 目錄下創建 privatechain 文件,用以存放區塊鏈數據。
在這裏插入圖片描述

2.以太坊私有鏈搭建

1.創建第一個節點

1.在 C:\Eth 目錄下創建創世塊文件 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
    }
}

  • Coinbase: 曠工賬戶
  • Difficulty: 挖礦難度,0x400,這個是簡單。
  • extraData:相當於備註 gasLimit:最小消耗 gas
  • nonce :64位隨機數,用於挖礦,注意他和mixhash的設置需要滿足以太坊黃皮書中的要求
  • parentHash :上一個區塊的Hash值,因爲是創世塊,石頭裏蹦出來的,沒有在它前面的,所以是0
  • Timestamp : 時間戳
    在這裏插入圖片描述

2.創建創世塊文件

打開cmd,進入 C:\Eth 目錄下(該目錄下有 geth.exegenesis.json 文件,便於運行geth命令),創世塊文件初始化命令如下:

geth -datadir "%cd%\privatechain\node1" init genesis.json
  • –datadir:後面跟本節點數據存放的目錄。
  • genesis.json:是init命令的參數。

執行該命令後會在 C:\Eth\privatechain下自動新建 node1 文件夾,並在node1下生成 gethkeystore 兩個文件夾。

  • 其中geth存放的是區塊信息,keystore中存放的是賬戶信息。

在這裏插入圖片描述
初始化完成以後你就擁有一條自己的私有鏈了,之後就可以啓動自己的私有鏈進行一些操作。

3.啓動私有鏈節點:

geth --targetgaslimit 4294967295 --rpc --rpcport "8101" --port "30301" --rpcapi "eth,web3,personal" --networkid 2020 --identity 2020 --nodiscover --maxpeers 5 --datadir "%cd%\privatechain\node1" --unlock 0 --rpccorsdomain "*" console 

註釋:

  • –targetgaslimit:每個塊的gas上限,這裏可以暫時理解爲容量
  • –rpc:啓動rpc通信,可以進行智能合約的部署和調試
  • –rpcaddr:rpc接口的地址
  • –rpcport:rpc接口的端口號
  • –port:網絡監聽端口,用於節點之間通信
  • –rpcapi:設置rpc的範圍,暫時開啓eth,web3,personal足夠
  • –networkid:設置當前區塊鏈的網絡ID,是一個數字,可以隨便寫
  • –identity:區塊鏈的標示,隨便填寫,用於標示目前網絡的名字
  • –nodiscover:禁止被網絡中其它節點發現,需要手動添加該節點到網絡
  • –maxpeers:最大節點數量
  • –datadir:設置當前區塊鏈網絡數據存放的位置
  • –unlock:解鎖某用戶(此處用用戶座標來控制,解鎖後的用戶調用接口發起交易時,不要需要提供密碼),0代表存儲在賬號數組中的第一個賬號。
    第一次啓動時,去掉這個參數,否則會報錯!因爲一開始沒有創建賬號,找不到該賬號!
  • –rpccorsdomain:限制rpc訪問源的ip,代表不限制
  • –mine:允許挖礦
  • –console:啓動命令行模式,可以在Geth中執行命令*

在這裏插入圖片描述
出現這個頁面則代表啓動成功!

  • 注意:如果之前創建了用戶,在啓動過程中會提示輸入密碼:XXXXXX(即之前創建的賬號) ,然後纔會啓動區塊鏈節點並進入Javascript Console。

3.以太坊私有鏈節點操作

1.新建賬戶:

personal.newAccount("密碼")

創建成功以後將會返回賬戶的地址:
在這裏插入圖片描述

如果沒有賬號直接開始挖礦的話,會遇到如下報錯:
在這裏插入圖片描述
2.查看礦工賬戶:

eth.coinbase

3.設置挖礦的賬號

miner.setEtherbase("賬戶地址")

4.開始挖礦:

miner.start(1)
  • 括號中的1表示用一個線程進行挖礦,如果不配置,就會不斷消耗計算機資源,讓CPU全速運行,影響計算機的使用。

出現以下界面就表示挖礦成功(那個問號代表的是小錘錘,這裏沒顯示出來):
在這裏插入圖片描述

5.停止挖礦:

miner.stop()

返回值爲true就對了。

第一次stop的時候也會初始化一次,不要慌,不要以爲沒停住……好吧我承認我當時慌了,連續執行了幾次stop命令:
在這裏插入圖片描述
6.查看賬戶餘額:

查詢的是第一個賬戶的餘額,當我們挖礦時,獎勵金存儲默認的是第一個賬戶。

eth.getBalance(eth.accounts[0])

在這裏插入圖片描述
換算成以太幣的單位來查看餘額:

web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')

在這裏插入圖片描述
7.轉賬

1.轉賬的前提是有兩個賬戶,所以先新建一個賬戶:
在這裏插入圖片描述
2.轉賬前確認一下兩個賬戶的餘額:
在這裏插入圖片描述
3.解鎖錢包,否則會報錯:

personal.unlockAccount(eth.accounts[0])

在這裏插入圖片描述
4.開始轉賬:

web3.eth.sendTransaction({from:web3.eth.accounts[0] , to: web3.eth.accounts[1],value: web3.toWei(1, "ether")})

在這裏插入圖片描述
現在只是轉賬提交成功,需要礦工挖到新的區塊才能算交易成功。(原因上面的理論知識第3點已經講過了)

5.再次執行挖礦命令後,查看餘額:
在這裏插入圖片描述
轉賬成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章