1. 程式人生 > 其它 >geth安裝與基本使用

geth安裝與基本使用

安裝準備:go,git

  • 通過PPAs安裝geth
1 $ sudo add-apt-repository -y ppa:ethereum/ethereum
2 $ sudo apt-get update
3 $ sudo apt-get install ethereum
  • 建立自己的私有鏈

   建立創世檔案

  建立一個genesis.json檔案,官網配置檔案如下:https://github.com/ethereum/go-ethereum,其中,chainId是私有鏈的id,注意不要和現有的主鏈(1)和測試鏈的id相同(2,3,42),例如:500,666等;alloc代表初始資產配置,在該區塊鏈產生時,就預先賦予這些賬戶一定數額的wei,可以將metamask中的地址寫入,分配以太幣,注意單位是wei;difficulty 定義了每次挖礦時,最終確定nonce 的難度;nonce預定一個隨機數,這是一個與PoW 機制有關的值;coinbase 每挖出一個區塊,都會獲得獎勵,該值指定預設情況下把獎勵給到哪個賬戶,實際上,我們每次挖礦開始之前,都會自己指定;gasLimit 規定該區塊鏈中,gas 的上限。

 1 {
 2   "config": {
 3     "chainId": <arbitrary positive integer>,
 4     "homesteadBlock": 0,
 5     "eip150Block": 0,
 6     "eip155Block": 0,
 7     "eip158Block": 0,
 8     "byzantiumBlock": 0,
 9     "constantinopleBlock": 0,
10     "petersburgBlock": 0,
11     "istanbulBlock": 0,
12     "berlinBlock
": 0 13 }, 14 "alloc": {}, 15 "coinbase": "0x0000000000000000000000000000000000000000", 16 "difficulty": "0x20000", 17 "extraData": "", 18 "gasLimit": "0x2fefd8", 19 "nonce": "0x0000000000000042", 20 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", 21 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 22 "timestamp": "0x00" 23 }

   初始化建立私有鏈

  建立myChain資料夾,用來指定資料儲存的位置,使用以下命令初始化私有鏈。

1 mkdir myChain
2 # 指定資料儲存位置
3 geth --datadir myChain/ init genesis.json

   私有鏈啟動

    Networkid與配置檔案中的id相同

1 geth --datadir mychain/ networkid 666

   info輸出重定向

    上面的命令啟動私有鏈,時不時就會出現info訊息,影響我們輸入geth命令,因此我們將info輸出重定向到一個log檔案,使用使用下面命令啟動。可以新開一個命令列終端輸入以下命令檢視日誌:tail -f geth.log。

1 geth --datadir mychain/ --networkid 666 console 2>geth.log

   建立完成

    可以使用exit和ctrl-d退出。

   啟動指令碼建立

    建立一個啟動rungeth.sh命令指令碼,之後執行指令碼,私有鏈就啟動了,其中指定了資料儲存位置,私有鏈網路id,開放埠,rpc埠,rpc地址,rpc方法,允許HTTP通道解鎖賬戶,info重定向等命令,請大家根本自身的實際情況進行修改,指令碼具體內容如下。(相關的引數的涉及可能在後面給出原因)

1 #!/bin/bash
2 geth --datadir . --networkid 666 --port 30303 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --allow-insecure-unlock --rpccorsdomain '*' console 2>1.log

   賦予rungeth.sh指令碼許可權

1 chmod 755 rungeth.sh

   執行指令碼

1 # 在rungeth.sh資料夾下執行該命令
2 ./rungeth.sh

   啟動命令引數說明

    使用最新版本geth客戶,當執行personal.unlockAccount()或在程式中呼叫personal_unlockAccount介面時,會出現:account unlock with HTTP access is forbidden異常。新版本geth,出於安全考慮,預設禁止了HTTP通道解鎖賬戶。在啟動命令中新增“--allow-insecure-unlock”引數進行開啟操作。

  • 安裝metamask

  MetaMask是一款在谷歌瀏覽器Chrome上使用的外掛型別的以太坊錢包,該錢包不需要下載,只需要在谷歌瀏覽器新增對應的擴充套件程式即可,非常輕量級,使用起來也非常方便。

   Chrome的安裝

   進入到Chrome的網上應用商店下載metamask

   MetaMask使用

    可以參考:https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true

  • Metamask連線自己的私有鏈(win10下的Ubuntu18.04虛擬機器)

   私有鏈啟動時命令引數包含rpc和rpcaddr

    其中rpcaddr "0.0.0.0",指定任何一個ip地址都可以訪問,rpc預設埠是8545。

   檢視虛擬機器IP地址

    ifconfig檢視虛擬機器的ip地址,此處你的虛擬機器要是橋接模式,不然不會有自己的ip。

   metamask連線

    在metamask上自定義rpc,網路名稱可以隨意取,URL地址為http://虛擬機器ip:8545,,鏈ID為私有鏈id看,儲存即可以連上虛擬機器上的私有鏈。

   MetaMask/外部賬戶匯入到Geth私鏈(可以在初始化私有鏈的配置檔案中就加上metamask賬戶地址)

    • 獲取MetaMask上賬戶的私鑰:點選賬戶詳情,匯出私鑰。
    • 拿到私鑰以後,在虛擬機器中建立一個文字檔案例如fk.txt放進去
    • 輸入geth account import 你的私鑰檔案路徑
    • 提示你輸入密碼,這個密碼是在geth控制檯使用的密碼
    • 發現生成的賬戶地址就是在MetaMask上的賬戶地址。
    • 檢視當前生成金鑰檔案位置:geth account list
    • 找到對應賬戶後面的儲存位置,把檔案放到專案中的keystore資料夾中即可。(keystore資料夾的位置為geth啟動命令是指定的資料儲存位置引數,即datadir)
    • 在geth控制檯中輸入eth.accounts檢視
    • 匯入完成

   完成metamask賬戶地址的新增到私有鏈中,稍後進行轉賬,即可看到賬戶餘額。

  • 基本命令

  下面的命令均在geth控制檯中輸入,即輸入啟動私有鏈命令後。

 1 # 建立一個新的賬戶,輸入兩遍密碼後,生成賬戶地址。以同樣的方式,可建立多個賬戶。
 2 personal.newAccount()
 3 # 檢視賬戶
 4 eth.accounts
 5 # 檢視賬戶餘額
 6 eth.getBalance(eth.accounts[0])
 7 # 啟動挖礦,其中 start 的引數表示挖礦使用的執行緒數。第一次啟動挖礦會先生成挖礦所需的 DAG 檔案,這個過程有點慢,等進度達到 100% 後,就會開始挖礦,此時螢幕會被挖礦資訊刷屏。
 8 miner.start(1)
 9 # 停止挖礦
10 miner.stop()
11 # 檢查挖礦是否已經停止,eth.mining 輸出為false時表示挖礦已經停止
12 eth.mining
13 # 當新區塊挖出後,挖礦即可結束。
14 miner.start(1);admin.sleepBlocks(1);miner.stop();
15 # 挖到一個區塊會獎勵以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,預設情況下 coinbase 是本地賬戶中的第一個賬戶,可以通過 miner.setEtherbase() 將其他賬戶設定成 coinbase。
16 
17 # 從賬戶 0 向賬戶 1 轉賬,先解鎖賬戶 0,才能發起交易,部署智慧合約時,同樣需要先解鎖。未解鎖返回的報錯資訊為:Error: authentication needed: password or unlock undefined。
18 personal.unlockAccount(eth.accounts[0])
19 # 傳送交易,賬戶 0 -> 賬戶 1:
20 amount = web3.toWei(5,'ether')
21 eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
22 # 此時如果沒有挖礦,用 txpool.status 命令可以看到本地交易池中有一個待確認的交易,可以使用 eth.getBlock("pending", true).transactions檢視當前待確認交易。使用下面命令開始挖礦。
23 miner.start(1);admin.sleepBlocks(1);miner.stop();
24 # 新區塊挖出後,挖礦結束,檢視賬戶 1 的餘額,已經收到了賬戶 0 的以太幣:
25 web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
26 # 檢視當前區塊總數
27 eth.blockNumber
28 # 通過區塊號檢視區塊
29 eth.getBlock(4)
30 # 通過交易 Hash 檢視交易(Hash 值包含在上面交易返回值中)
31 eth.getTransaction("0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce")
  • 參考文章

https://blog.csdn.net/weixin_43584346/article/details/114792707

https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true

https://www.cnblogs.com/soowin/p/14328195.html

https://blog.csdn.net/wo541075754/article/details/98847308

https://blog.csdn.net/youlinhuanyan/article/details/99574782

https://blog.csdn.net/u014439239/article/details/79347389

https://blog.csdn.net/mingrizhixin/article/details/111407758

https://blog.csdn.net/weixin_43988498/article/details/108394012

https://www.jianshu.com/p/9fa31e4cdf4d

https://github.com/ethereum/go-ethereum