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)
  
原文地址:https://www.cnblogs.com/hbright/p/15707491.html