eth私有節點搭建


一.單節點的搭建

  1.從github上下載源碼

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

  2. 源碼編譯

    cd  go-ethereum

    make geth

    編譯的時候出現的報錯信息:

    (1)env GO111MODULE=on go run build/ci.go install ./cmd/geth

    問題原因:沒有安裝golang

    解決方法:在github上查看當前eth版本要求安裝的golang版本。大概安裝步驟:

      wget -c https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local

      vim /etc/profile
      export PATH=$PATH:/usr/local/go/bin

      source /etc/profiel

    (2) go: github.com/Azure/azure-pipeline-go@v0.2.2: Get "https://proxy..........省略

    問題原因: 編譯eth需要下載golang的第三方包,但網絡被 牆了,需要添加代理

      vim /etc/profile

      GOPROXY=https://goproxy.io

                     source /etc/profile

    (3)還有報錯就多執行幾次,只要不是同一個錯誤就行。

   3. 准備genesis文件 並初始化節點

    

{
 "config": {
    "chainId": 908,
    "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": "0xafa725",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
    "0x1e82968C4624880FD1E8e818421841E6DB8D1Fa4" : {"balance" : "30000000000000000000"}
  },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

  初始化節點:geth --datadir data0 init ../genesis.json

  遇到的問題:(1) alloc 字段不能為空,有些博客上的genesis文件這個字段為空,在我這個版本上校驗不過,找一個有這個字段的genesis文件;

                           (2)difficulty   這個字段的數字大小根據自己出塊的速度后續自己進行調整。

  

  4.啟動節點

    geth --datadir data0 --networkid 908 console

  在這里啟動后單 節點就可以操作了,在控制台實現了交互命令,但節點不斷地有info信息顯示出來,不過不影響交互。

  5.開始運行

    新建用戶:personal.newAccount()

    開始出塊:miner.start()

  出塊之后就可以打包交易了,默認出塊獎勵發放在創建時的第一個用戶,后續就可以進行其它操作了。

  可以使用miner.stop()停止出塊,使用ctrl+D關掉控制台,后續再要使用的時候重復步驟4就行了。

  5.geth相關的配置說明

  

teth@uosbp-1:~/chaindata/first$ geth --help
NAME:
   geth - the go-ethereum command line interface

   Copyright 2013-2021 The go-ethereum Authors

USAGE:
   geth [options] [command] [command options] [arguments...]
   
VERSION:
   1.10.14-unstable-8bbf83e7-20211217
   
COMMANDS:
   account                            Manage accounts
   attach                             Start an interactive JavaScript environment (connect to node)
   console                            Start an interactive JavaScript environment
   db                                 Low level database operations
   dump                               Dump a specific block from storage
   dumpconfig                         Show configuration values
   dumpgenesis                        Dumps genesis block JSON configuration to stdout
   export                             Export blockchain into file
   export-preimages                   Export the preimage database into an RLP stream
   import                             Import a blockchain file
   import-preimages                   Import the preimage database from an RLP stream
   init                               Bootstrap and initialize a new genesis block
   js                                 Execute the specified JavaScript files
   license                            Display license information
   makecache                          Generate ethash verification cache (for testing)
   makedag                            Generate ethash mining DAG (for testing)
   removedb                           Remove blockchain and state databases
   show-deprecated-flags              Show flags that have been deprecated
   snapshot                           A set of commands based on the snapshot
   version                            Print version numbers
   version-check                      Checks (online) whether the current version suffers from any known security vulnerabilities
   wallet                             Manage Ethereum presale wallets
   help, h                            Shows a list of commands or help for one command
   
ETHEREUM OPTIONS:
  --config value                      TOML 配置文件
  --datadir value                     數據庫和keystore密鑰的數據目錄 (默認: "/home/teth/.ethereum")
  --datadir.ancient value             古代鏈段的數據目錄(默認 = 內鏈數據)
  --datadir.minfreedisk value         以 MB 為單位的最小可用磁盤空間,一旦達到觸發自動關閉(默認 = --cache.gc 轉換為 MB,0 = 禁用)
  --keystore value                    keystore存放目錄(默認在datadir內)
  --usb                               啟用監控和管理USB硬件錢包
  --pcscdpath value                   智能卡守護程序 (pcscd) 套接字文件的路徑(默認:“/run/pcscd/pcscd.comm”)
  --networkid value                   網絡標識符 (整型)(For testnets: use --ropsten, --rinkeby, --goerli instead) (default: 1)
  --mainnet                           以太坊主網
  --goerli                            Gorli 網絡:預先配置的權威證明測試網絡
  --rinkeby                           Rinkeby 網絡:預先配置的權威證明測試網絡
  --ropsten                           Ropsten 網絡:預先配置的工作量證明測試網絡
  --sepolia                           Sepolia network: pre-configured proof-of-work test network
  --syncmode value                    區塊同步模式 ("snap", "full" or "light") (default: snap)
  --exitwhensynced                    Exits after block synchronisation completes
  --gcmode value                      區塊鏈垃圾收集模式 ("full", "archive") (default: "full")
  --txlookuplimit value               維護交易索引的最近區塊數(默認值 = 大約一年,0 = 整個鏈)(默認值:2350000--ethstats value                    上報ethstats service  URL (nodename:secret@host:port)
  --identity value                    自定義節點名
  --lightkdf                          在KDF強度消費時降低key-derivation RAM&CPU使用
  --whitelist value                   使用逗號分隔的塊編號到hash的映射來執行 (<number>=<hash>)
  
輕客戶端選項:
  --light.serve value                 為 LES 請求提供服務所允許的最大時間百分比(多線程處理允許值超過 100)(默認值:0--light.ingress value               服務輕客戶端的傳入帶寬限制(千字節/秒,0 = 無限制)(默認值:0--light.egress value                服務輕客戶端的傳出帶寬限制(千字節/秒,0 = 無限制)(默認值:0--light.maxpeers value              要服務的輕客戶端或要附加的輕服務器的最大數量(默認值:100--ulc.servers value                 受信任的超輕型服務器列表
  --ulc.fraction value                宣布新頭所需的可信超輕型服務器的最低百分比(默認值:75--ulc.onlyannounce                  超輕服務器只發送通知
  --light.nopruning                   禁用遠古輕鏈數據修剪
  --light.nosyncserve                 在同步之前啟用服務輕客戶端
  
開發鏈選項:
  --dev                               使用POA共識網絡,默認預分配一個開發者賬戶並且會自動開啟挖礦
  --dev.period value                  開發者模式下挖礦周期 (0 = 僅在交易pending時進行挖礦) (默認: 0)
  --dev.gaslimit value                Initial block gas limit (default: 11500000)
  
ETHASH 選項:
  --ethash.cachedir value             ethash驗證緩存目錄(默認 = datadir目錄內) 
  --ethash.cachesinmem value          在內存保存的最近的ethash緩存個數  (每個緩存16MB ) (默認: 2) 
  --ethash.cachesondisk value         在磁盤保存的最近的ethash緩存個數 (每個緩存16MB) (默認: 3)
  --ethash.cacheslockmmap             Lock memory maps of recent ethash caches
  --ethash.dagdir value               存ethash DAGs目錄(默認: "/home/teth/.ethash")
  --ethash.dagsinmem value            在內存保存的最近的ethash DAGs 個數 (每個1GB以上) (默認: 1)
  --ethash.dagsondisk value           在磁盤保存的最近的ethash DAGs 個數 (每個1GB以上) (默認: 2)
  --ethash.dagslockmmap               Lock memory maps for recent ethash mining DAGs
  
交易池選項:
  --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          所有帳戶可執行的最大交易槽數量 (默認: 5120) 
  --txpool.accountqueue value         每個帳戶允許的最多不可執行交易槽數量 (默認: 64)
  --txpool.globalqueue value          所有帳戶不可執行交易最大槽數量  (默認: 1024)
  --txpool.lifetime value             不可執行交易最大入隊時間(默認: 3小時)
  
性能調優選項:
  --cache value                       分配給內部緩存的內存的兆字節(默認 = 4096 mainnet full node, 128 light mode) (default: 1024)
  --cache.database value              用於數據庫io的緩存內存預留百分比 (default: 50)
  --cache.trie value                  用於trie緩存的緩存內存預留百分比 (default = 15% full mode, 30% archive mode) (default: 15)
  --cache.trie.journal value          trie 緩存的磁盤日志目錄以在節點重新啟動后繼續存在(默認值:“triecache”)
  --cache.trie.rejournal value        重新生成 trie 緩存日志的時間間隔(默認值:1小時)
  --cache.gc value                    用於trie修剪的緩存內存預留百分比 (default = 25% full mode, 0% archive mode) (default: 25)
  --cache.snapshot value              用於快照緩存的緩存允許百分比(默認值 = 10% 完整模式,20% 存檔模式)(默認值:10--cache.noprefetch                  在塊導入期間禁用啟發式狀態預取(更少的 CPU 和磁盤 IO,更多的時間等待數據)
  --cache.preimages                   啟用記錄 trie 密鑰的 SHA3/keccak 原像
  
帳戶選項:
  --unlock value                      用逗號分隔需要解鎖的賬戶
  --password value                    用於非交互式密碼輸入的密碼文件
  --signer value                      External signer (url or path to ipc file)
  --allow-insecure-unlock             當與帳戶相關的 RPC 被 http 公開時,允許不安全的帳戶解鎖
  
API和控制台選項:
  --ipcdisable                        禁用 IPC-RPC 服務器
  --ipcpath value                     datadir 中 IPC 套接字/管道的文件名(顯式路徑對其進行轉義)
  --http                              啟用 HTTP-RPC 服務器
  --http.addr value                    HTTP-RPC 服務器監聽接口(默認:“localhost”)
  --http.port value                   HTTP-RPC 服務器監聽端口(默認:8545--http.api value                    通過 HTTP-RPC 接口提供的 API
  --http.rpcprefix value              提供 JSON-RPC 的 HTTP 路徑路徑前綴。使用“/”在所有路徑上提供服務。
  --http.corsdomain value             接受跨源請求的域的逗號分隔列表(瀏覽器強制執行)
  --http.vhosts value                 逗號分隔的虛擬主機名列表,從中接受請求(服務器強制執行)。接受“*”通配符。 (默認:“本地主機”)
  --ws                                啟用WS-RPC服務器
  --ws.addr value                     WWS-RPC服務器監聽接口地址 (default: "localhost")
  --ws.port value                     WS-RPC服務器監聽端口 (default: 8546)
  --ws.api value                      基於WS-RPC的接口提供的API
  --ws.rpcprefix value                HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.
  --ws.origins value                  websockets請求允許的源
  --graphql                           在 HTTP-RPC 服務器上啟用 GraphQL。請注意,GraphQL 只能在 HTTP 服務器啟動的情況下啟動。
  --graphql.corsdomain value          接受跨源請求的域的逗號分隔列表(瀏覽器強制執行)
  --graphql.vhosts value              逗號分隔的虛擬主機名列表,從中接受請求(服務器強制執行)。接受“*”通配符。 (默認:“本地主機”)
  --rpc.gascap value                   設置可以在 eth_call/estimateGas 中使用的 gas 上限(0=無限)(默認值:50000000--rpc.evmtimeout value              Sets a timeout used for eth_call (0=infinite) (default: 5s)
  --rpc.txfeecap value                 設置可以通過 RPC API 發送的交易費用上限(以以太為單位)(0 = 無上限)(默認值:1--rpc.allow-unprotected-txs          允許通過 RPC 提交不受保護的(非 EIP155 簽名)交易
  --jspath loadScript                 JavaScript加載腳本的根路徑 (default: ".")
  --exec value                         執行JavaScript語句(需要結合console/attach命令一起使用)
  --preload value                     預加載到控制台的逗號分隔的JavaScript文件列表
  
網絡選項:
  --bootnodes value                   用於P2P發現bootstrap的逗號分隔的enode url(為輕量級服務器設置v4+v5)
  --discovery.dns value               Sets DNS discovery entry points (use "" to disable DNS)
  --port value                        網卡監聽端口(默認值:30303)
  --maxpeers value                    最大的網絡節點數量(如果設置為0,網絡將被禁用)(默認值:50) 
  --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.notify.full                 Notify with pending block headers instead of work packages
  --miner.gasprice value              挖礦交易的最低gas價格 (default: 1000000000)
  --miner.gaslimit value              被挖區塊的目標gas的頂層(default: 8000000),即被記錄的區塊提供的gas要低於該值,否則不會被記錄 
  --miner.etherbase value             P挖礦獎勵地址(默認=第一個創建的帳戶)(default: "0")
  --miner.extradata value             礦工設置的額外塊數據(default = client version)
  --miner.recommit value              重新創建正在挖的塊的時間間隔(default: 3s)
  --miner.noverify                    禁用遠程密封驗證
  
GAS價格選項:
  --gpo.blocks value                  用於檢查gas價格的最近生成的塊的個數 (default: 20)
  --gpo.percentile value              建議的gas價格是一組最近的交易gas價格的該給定百分比的值 (default: 60)
  --gpo.maxprice value                Maximum transaction priority fee (or gasprice before London fork) to be recommended by gpo (default: 500000000000)
  --gpo.ignoreprice value             Gas price below which gpo will ignore transactions (default: 2)
  
虛擬機選項:
  --vmdebug                           記錄VM及合約調試的有用信息
  
日志和調試選項:
  --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)
  --log.json                          Format logs with JSON
  --log.backtrace value               請求特定日志記錄堆棧跟蹤 (比如 "block.go:271")
  --log.debug                         帶有調用站點位置(文件和行號)的日志消息
  --pprof                             啟用pprof HTTP服務器
  --pprof.addr value                  pprof HTTP服務器監聽接口 (default: "127.0.0.1")
  --pprof.port value                  pprof HTTP服務器監聽端口 (default: 6060)
  --pprof.memprofilerate value        按該給定頻率打開memory profiling(default: 524288)
  --pprof.blockprofilerate value      按指定頻率打開block profiling (default: 0)
  --pprof.cpuprofile value            將CPU profile寫入指定文件
  --trace value                       將execution trace寫入指定文件
  
METRICS AND STATS OPTIONS:
  --metrics                              啟用metrics標准收集和報告
  --metrics.expensive                    啟用昂貴的指標收集和報告
  --metrics.addr value                   啟用獨立指標 HTTP 服務器偵聽接口(默認值:“127.0.0.1”)
  --metrics.port value                   指標 HTTP 服務器監聽端口(默認:6060)
  --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.tags value          連接到所有測量值的InfluxDB數據庫主機標記(default: "localhost")
  --metrics.influxdbv2                   Enable metrics export/push to an external InfluxDB v2 database
  --metrics.influxdb.token value         Token to authorize access to the database (v2 only) (default: "test")
  --metrics.influxdb.bucket value        InfluxDB bucket name to push reported metrics to (v2 only) (default: "geth")
  --metrics.influxdb.organization value  InfluxDB organization name (v2 only) (default: "geth")
  
ALIASED (deprecated) OPTIONS:
  --nousb                             禁用監控和管理USB硬件錢包 (deprecated)
  
MISC OPTIONS:
  --snapshot                                啟用快照數據庫加載模式 (default = enable)
  --bloomfilter.size value                  分配給布隆過濾器用於修剪的內存兆字節 (default: 2048)
  --help, -h                                幫助信息
  --catalyst                                Catalyst 模式(eth2 集成測試)
  --override.arrowglacier value             手動指定 London fork-block,覆蓋捆綁設置(默認值:0)
  --override.terminaltotaldifficulty value  Manually specify TerminalTotalDifficulty, overriding the bundled setting (default: 0)
  

 


免責聲明!

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



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