ETH私有鏈搭建與使用-啟動eth節點並進行錢包余額初始化(2)


操作系統環境:CentOS 7.6.1810,操作基礎目錄/data,如無該目錄請手動創建(mkdir /data)

 

1.創建創世區塊數據json文件並啟動ETH節點

1.1在/data目錄中新建一個文件夾(mkdir eth-test),進入該目錄(cd eth-test)

1.2創建customGenesis.json文件並填入以下內容

touch customGenesis.json
{
  "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": {
        "0xFfD4a30C08d9f16F095f6315e14bd034F7d04fb0": {
            "balance": "100000000000000000000000000000000"
        }
   },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

alloc中的錢包地址為你需要初始化並且有私鑰的錢包地址,后面導入該錢包就會有對應余額可用,我這里用的是我們上一篇文章中通過metamask生成的錢包地址.

1.3初始化區塊

geth --datadir data init customGenesis.json

1.4啟動節點,指定挖礦賬戶,進入eth console操作界面

geth --datadir "./data" --rpc --rpcaddr=0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 1981 --port 30303 --allow-insecure-unlock --mine --miner.etherbase "0xFfD4a30C08d9f16F095f6315e14bd034F7d04fb0" console

1.5后台啟動並進入console

后台啟動並立即開始挖礦

nohup geth --datadir "./data" --rpc --rpcaddr=0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 1981 --port 30303 --allow-insecure-unlock --mine --miner.threads 1 --miner.etherbase "0x078e73093E4F3dDFce2b41b0D72827A021d9d6cB" 2>> ./geth.log &

進入console

geth attach ipc:/data/eth-test/data/geth.ipc

1.6參數說明

ETHEREUM選項:
  --config value                        TOML 配置文件
  --datadir "/home/user4/.ethereum"  數據庫和keystore密鑰的數據目錄
  --keystore                            keystore存放目錄(默認在datadir內)
  --nousb                               禁用監控和管理USB硬件錢包
  --networkid value                     網絡標識符(整型, 1=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (默認: 1)
  --testnet                             Ropsten網絡:預配置的POW(proof-of-work)測試網絡
  --rinkeby                             RRinkeby網絡: 預配置的POA(proof-of-authority)測試網絡
  --syncmode "fast"                     同步模式 ("fast", "full", or "light")
  --gcmode value                        區塊鏈垃圾收集模式 ("full", "archive") (default: "full")
  --ethstats value                      上報ethstats service  URL (nodename:secret@host:port)
  --identity value                      自定義節點名
  --lightserv value                     允許LES請求時間最大百分比(090)(默認值:0)
  --lightpeers value                    最大LES client peers數量(默認值:100)
  --lightkdf                            在KDF強度消費時降低key-derivation RAM&CPU使用
  --whitelist value                     使用逗號分隔的塊編號到hash的映射來執行(<number>=<hash>)

開發鏈選項:
  --dev               使用POA共識網絡,默認預分配一個開發者賬戶並且會自動開啟挖礦
  --dev.period value  開發者模式下挖礦周期 (0 = 僅在交易pending時進行挖礦) (默認: 0)

ETHASH選項:
  --ethash.cachedir                         ethash驗證緩存目錄(默認 = datadir目錄內)
  --ethash.cachesinmem value                在內存保存的最近的ethash緩存個數  (每個緩存16MB ) (默認: 2)
  --ethash.cachesondisk value               在磁盤保存的最近的ethash緩存個數 (每個緩存16MB) (默認: 3)
  --ethash.dagdir "/home/user4/.ethash"  存ethash DAGs目錄 (default = inside home folder)
  --ethash.dagsinmem value                  在內存保存的最近的ethash DAGs 個數 (每個1GB以上) (默認: 1)
  --ethash.dagsondisk value                 在磁盤保存的最近的ethash DAGs 個數 (每個1GB以上) (默認: 2)

交易池選項:
  --txpool.locals value        將逗號分隔的帳戶視為局部變量(沒有刷新,包含優先級)
  --txpool.nolocals            為本地提交交易禁用價格豁免
  --txpool.journal value       本地交易的磁盤日志:用於節點重啟 (默認: "transactions.rlp")
  --txpool.rejournal value     重新生成本地交易日志的時間間隔 (默認: 1小時)
  --txpool.pricelimit value    加入交易池的最小的gas價格限制(默認: 1)
  --txpool.pricebump value     價格波動百分比(相對之前已有交易) (默認: 10)
  --txpool.accountslots value  每個帳戶保證可執行的最少交易槽數量  (默認: 16)
  --txpool.globalslots value   所有帳戶可執行的最大交易槽數量 (默認: 4096)
  --txpool.accountqueue value  每個帳戶允許的最多非可執行交易槽數量 (默認: 64)
  --txpool.globalqueue value   所有帳戶非可執行交易最大槽數量  (默認: 1024)
  --txpool.lifetime value      非可執行交易最大入隊時間(默認: 3小時)

性能調優選項:
  --cache value            分配給內部緩存的內存的兆字節 (默認值為: 1024)
  --cache.database value   用於數據庫io的緩存內存預留百分比 (default: 50)
  --cache.trie value       用於trie緩存的緩存內存預留百分比 (default: 25)
  --cache.gc value         用於trie修剪的緩存內存預留百分比 (default: 25)
  --trie-cache-gens value  需要保存在內存中的trie節點代數 (default: 120)

帳戶選項:
  --unlock value    需解鎖賬戶用逗號分隔
  --password value  用於非交互式密碼輸入的密碼文件

API和控制台選項:
  --rpc                  啟用HTTP-RPC服務器
  --rpcaddr value        HTTP-RPC服務器接口地址(默認值:"localhost")
  --rpcport value        HTTP-RPC服務器監聽端口(默認值:8545)
  --rpcapi value         基於HTTP-RPC接口提供的API
  --ws                   啟用WS-RPC服務器
  --wsaddr value         WWS-RPC服務器監聽接口地址(default: "localhost")
  --wsport value         WS-RPC服務器監聽端口(默認值:8546)
  --wsapi value          基於WS-RPC的接口提供的API
  --wsorigins value      websockets請求允許的源
  --ipcdisable           禁用IPC-RPC服務器(默認是打開的)
  --ipcpath              包含在datadir里的IPC socket/pipe文件名(轉義過的顯式路徑)
  --rpccorsdomain value  允許跨域請求的逗號分隔域名列表(瀏覽器強制)
  --rpcvhosts value      接受請求的虛擬主機名的逗號分隔列表(服務器強制的)。接受“*”通配符.(default: "localhost")
  --jspath loadScript    JavaScript加載腳本的根路徑 (default: ".")
  --exec value           執行JavaScript語句(需要結合console/attach命令一起使用)
  --preload value        預加載到控制台的逗號分隔的JavaScript文件列表

網絡選項:
  --bootnodes value     用於P2P發現bootstrap的逗號分隔的enode url(為輕量級服務器設置v4+v5)
  --bootnodesv4 value   用於P2P v4發現bootstrap的逗號分隔的enode url(輕服務器, 全節點)
  --bootnodesv5 value   用於P2P v5發現bootstrap的逗號分隔的enode url(輕服務器, 輕節點)
  --port value          網卡監聽端口(默認值:30303)
  --maxpeers value      最大的網絡節點數量(如果設置為0,網絡將被禁用)(默認值:25)
  --maxpendpeers value  最大嘗試連接的數量(如果設置為0,則將使用默認值)(默認值:0)
  --nat value           NAT端口映射機制 (any|none|upnp|pmp|extip:<IP>)(default: "any")
  --nodiscover          禁用節點發現機制(手動添加節點)
  --v5disc              啟用實驗性的RLPx V5(Topic發現)機制
  --netrestrict value   限制對給定IP網絡的網絡通信(CIDR掩碼)
  --nodekey value       P2P節點密鑰文件
  --nodekeyhex value    十六進制的P2P節點密鑰(用於測試)

礦工選項:
  --mine                         啟動挖礦
  --miner.threads value          挖礦使用的CPU線程數量(默認值:0)
  --miner.notify value           逗號分隔的HTTP URL列表,用於通知新工作包
  --miner.gasprice "1000000000"  挖礦交易的最低gas價格
  --miner.gastarget value        被挖區塊的目標gas的底層(default: 8000000),即被記錄的區塊提供的gas要高於該值,否則不會被記錄
  --miner.gaslimit value         被挖區塊的目標gas的頂層(default: 8000000),即被記錄的區塊提供的gas要低於該值,否則不會被記錄
  --miner.etherbase value        挖礦獎勵地址(默認=第一個創建的帳戶)(default: "0")
  --miner.extradata value        礦工設置的額外塊數據(default = client version)
  --miner.recommit value         重新創建正在挖的塊的時間間隔(default: 3s)
  --miner.noverify               禁用遠程密封驗證

GAS價格選項:
  --gpoblocks value      用於檢查gas價格的最近生成的塊的個數 (default: 20)
  --gpopercentile value  建議的gas價格是一組最近的交易gas價格的該給定百分比的值(default: 60)

虛擬機選項:
  --vmdebug         記錄VM及合約調試的有用信息
  --vm.evm value    外部EVM配置(默認=內置解釋器)
  --vm.ewasm value  外部ewasm配置(默認=內置解釋器)

日志和調試選項:
  --fakepow                 禁用proof-of-work驗證
  --nocompaction            在導入后禁用db壓縮
  --verbosity value         日志詳細度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
  --vmodule value           每個模塊詳細度:以 <pattern>=<level>的逗號分隔列表 (比如 eth/*=6,p2p=5)
  --backtrace value         請求特定日志記錄堆棧跟蹤 (比如 "block.go:271")
  --debug                   帶有調用站點位置(文件和行號)的日志消息
  --pprof                   啟用pprof HTTP服務器
  --pprofaddr value         pprof HTTP服務器監聽接口 (default: "127.0.0.1")
  --pprofport value         pprof HTTP服務器監聽端口 (default: 6060)
  --memprofilerate value    按該給定頻率打開memory profiling(default: 524288)
  --blockprofilerate value  按指定頻率打開block profiling (default: 0)
  --cpuprofile value        將CPU profile寫入指定文件
  --trace value             將execution trace寫入指定文件

METRICS和狀態選項:
  --metrics                          啟用metrics標准收集和報告
  --metrics.influxdb                 啟用metrics導出/推送到外部的InfluxDB數據庫
  --metrics.influxdb.endpoint value  將metrics報告給InfluxDB數據庫API端點(default: "http://localhost:8086")
  --metrics.influxdb.database value  將報告的metrics推送到的InfluxDB數據庫的名稱(default: "geth")
  --metrics.influxdb.username value  授權訪問數據庫的用戶名 (default: "test")
  --metrics.influxdb.password value  授權訪問數據庫的密碼 (default: "test")
  --metrics.influxdb.host.tag host   連接到所有測量值的InfluxDB數據庫主機標記(default: "localhost")

WHISPER(實驗)選項:
  --shh                       啟用Whisper
  --shh.maxmessagesize value  可接受的最大的消息大小 (default: 1048576)
  --shh.pow value             可接受的最小的POW (default: 0.2)
  --shh.restrict-light        限制兩個Whisper客戶端之間的連接

棄用選項:
  --minerthreads value     用於挖礦的CPU線程數(已棄用,現在使用--miner.threads) (default: 0)
  --targetgaslimit value   被挖區塊的目標gas底層(棄用, 現在使用--miner.gastarget) (default: 8000000)
  --gasprice "1000000000"  挖去交易的最小gas價格(棄用, 現在使用--miner.gasprice)
  --etherbase value        區塊挖礦獎勵的address(default = 第一個賬戶, 棄用, 現在使用--miner.etherbase) (default: "0")
  --extradata value        被礦工設置的區塊額外數據(default = client version, 棄用, 現在使用 --miner.extradata)

其他選項:
  --override.constantinople value  手動指定constantinople分支區塊,覆蓋綁定設置 (default: 0)
  --help, -h                       顯示幫助信息

2.通過私鑰導入錢包並查詢可用余額

personal.importRawKey("54732a579d1cd92215100f985de437dc8345fec50a8405707be173b719c93071", "123456")

第一個參數為錢包地址私鑰,第二個參數為設置的密碼,解鎖賬戶需要此密碼

 

查詢可用余額

eth.getBalance("0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0")

 看到余額是我們設置的值代表成功,如果顯示為0,請檢查創世區塊json文件,並重新初始化再啟動

 

3.試試在geth console中創建賬戶並通過導入賬戶給創建的新賬戶轉賬吧

3.1創建賬戶

personal.newAccount("123456")

 

 創建成功后返回對應賬戶錢包地址,這里的參數為解鎖賬戶密碼,我這里統一設置為123456,方便記憶

3.2查看新賬戶余額並給新賬戶轉賬

解鎖賬戶

personal.unlockAccount("0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0", "123456");

轉賬

web3.eth.sendTransaction({from:"0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0",to:"0xc436efd727da4cb08414752e024e588102a147d0",value:web3.toWei(2,"ether")})

 

 轉賬之后返回transactionId:0xfcdc7665d550ba5d678fd338ae0ffba0bd3f9264efc385ad496a871467537817,這里我們查詢到新賬戶的余額依然是0.這是因為我們只是發送了交易,目前還沒有礦工處理,需要開啟挖礦打包該筆交易.

查看待處理任務

txpool.status

開啟挖礦(參數代表使用線程數量,首次開啟挖礦需要等待一段時間完成DAG的過程)

miner.start(1)

 

 

看到成功挖礦后停止挖礦

miner.stop()

查詢新賬戶余額(這里eth的精度是18位,實際是2個eth)

 

4.多節點部署

4.1通過之前的步驟采用同一個json文件搭建並啟動一個新的eth節點

4.2查看新節點信息

admin.nodeInfo.enode

 

4.3節點加入

在原有的節點上加入這個新節點,參數在上面查詢的基礎上修改ip地址為服務器ip地址,放開對應端口的防火牆攔截即可

admin.addPeer("enode://610499a16f016c404a7c75c3edd1cc62947240f49b736db2de71a50a6d13a14c2e76440eb3e7ef0b00ea0e6ccab68e3ed7c9af33be0f0130cbe16a9090bda3eb@116.62.58.xxx:30303?discport=0")

 

 查詢節點數量

net.peerCount

至此,恭喜你,基礎的geth錢包操作及多節點搭建就完成了.后續文章將介紹智能合約的部署和調用,如果你覺得文章對你有幫助,可以請作者喝杯咖啡.

 


免責聲明!

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



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