一.单节点的搭建
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)