在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.exe 和 genesis.json 檔案,便于運行geth命令),創世塊檔案初始化命令如下:
geth -datadir "%cd%\privatechain\node1" init genesis.json
- –datadir:后面跟本節點資料存放的目錄,
- genesis.json:是init命令的引數,
執行該命令后會在 C:\Eth\privatechain下自動新建 node1 檔案夾,并在node1下生成 geth 和 keystore 兩個檔案夾,
- 其中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.再次執行挖礦命令后,查看余額:

轉賬成功!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71818.html
標籤:其他
上一篇:用加密演算法給女朋友寫封情書
下一篇:HC超級共識全方位無死角解讀
