一.單節點的搭建
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)