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 15 --port 30303 --http --http.addr "0.0.0.0" --http.port 8545 --http.api 'db,net,eth,web3,personal' --allow-insecure-unlock --http.corsdomain '*' console 2>> geth.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

 


免責聲明!

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



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