操作系統環境: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請求時間最大百分比(0 – 90)(默認值: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錢包操作及多節點搭建就完成了.后續文章將介紹智能合約的部署和調用,如果你覺得文章對你有幫助,可以請作者喝杯咖啡.