要读懂以太坊源码,先熟悉配置文件的每个配置项也是非常有必要的,以下代码是以太坊主网配置文件(geth.toml)的完整内容,后面是对每个配置项的说明:
[Eth]
NetworkId = 0
SyncMode = "snap"
EthDiscoveryURLs = []
SnapDiscoveryURLs = []
NoPruning = false
NoPrefetch = false
TxLookupLimit = 2350000
TransactionHistory = 2350000
StateHistory = 90000
LightPeers = 100
DatabaseCache = 512
DatabaseFreezer = ""
TrieCleanCache = 154
TrieDirtyCache = 256
TrieTimeout = 3600000000000
SnapshotCache = 102
Preimages = false
FilterLogCacheSize = 32
EnablePreimageRecording = false
VMTrace = ""
VMTraceJsonConfig = ""
RPCGasCap = 50000000
RPCEVMTimeout = 5000000000
RPCTxFeeCap = 1e+00
[Eth.Miner]
GasCeil = 30000000
GasPrice = 1000000
Recommit = 2000000000
[Eth.TxPool]
Locals = []
NoLocals = false
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1
PriceBump = 10
AccountSlots = 16
GlobalSlots = 5120
AccountQueue = 64
GlobalQueue = 1024
Lifetime = 10800000000000
[Eth.BlobPool]
Datadir = "blobpool"
Datacap = 2684354560
PriceBump = 100
[Eth.GPO]
Blocks = 20
Percentile = 60
MaxHeaderHistory = 1024
MaxBlockHistory = 1024
MaxPrice = 500000000000
IgnorePrice = 2
[Node]
DataDir = "/root/.ethereum"
IPCPath = "geth.ipc"
HTTPHost = ""
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["net", "web3", "eth"]
AuthAddr = "localhost"
AuthPort = 8551
AuthVirtualHosts = ["localhost"]
WSHost = ""
WSPort = 8546
WSModules = ["net", "web3", "eth"]
GraphQLVirtualHosts = ["localhost"]
BatchRequestLimit = 1000
BatchResponseMaxSize = 25000000
[Node.P2P]
MaxPeers = 50
NoDiscovery = false
DiscoveryV4 = true
BootstrapNodes = ["enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", "enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303"]
BootstrapNodesV5 = ["enr:-KG4QMOEswP62yzDjSwWS4YEjtTZ5PO6r65CPqYBkgTTkrpaedQ8uEUo1uMALtJIvb2w_WWEVmg5yt1UAuK1ftxUU7QDhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQEnfA2iXNlY3AyNTZrMaEDfol8oLr6XJ7FsdAYE7lpJhKMls4G_v6qQOGKJUWGb_uDdGNwgiMog3VkcIIjKA", "enr:-KG4QF4B5WrlFcRhUU6dZETwY5ZzAXnA0vGC__L1Kdw602nDZwXSTs5RFXFIFUnbQJmhNGVU6OIX7KVrCSTODsz1tK4DhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQExNYEiXNlY3AyNTZrMaECQmM9vp7KhaXhI-nqL_R0ovULLCFSFTa9CPPSdb1zPX6DdGNwgiMog3VkcIIjKA", "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", "enr:-Le4QPUXJS2BTORXxyx2Ia-9ae4YqA_JWX3ssj4E_J-3z1A-HmFGrU8BpvpqhNabayXeOZ2Nq_sbeDgtzMJpLLnXFgAChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISsaa0Zg2lwNpAkAIkHAAAAAPA8kv_-awoTiXNlY3AyNTZrMaEDHAD2JKYevx89W0CcFJFiskdcEzkH_Wdv9iW42qLK79ODdWRwgiMohHVkcDaCI4I", "enr:-Le4QLHZDSvkLfqgEo8IWGG96h6mxwe_PsggC20CL3neLBjfXLGAQFOPSltZ7oP6ol54OvaNqO02Rnvb8YmDR274uq8ChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLosQxg2lwNpAqAX4AAAAAAPA8kv_-ax65iXNlY3AyNTZrMaEDBJj7_dLFACaxBfaI8KZTh_SSJUjhyAyfshimvSqo22WDdWRwgiMohHVkcDaCI4I", "enr:-Le4QH6LQrusDbAHPjU_HcKOuMeXfdEB5NJyXgHWFadfHgiySqeDyusQMvfphdYWOzuSZO9Uq2AMRJR5O4ip7OvVma8BhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY9ncg2lwNpAkAh8AgQIBAAAAAAAAAAmXiXNlY3AyNTZrMaECDYCZTZEksF-kmgPholqgVt8IXr-8L7Nu7YrZ7HUpgxmDdWRwgiMohHVkcDaCI4I", "enr:-Le4QIqLuWybHNONr933Lk0dcMmAB5WgvGKRyDihy1wHDIVlNuuztX62W51voT4I8qD34GcTEOTmag1bcdZ_8aaT4NUBhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY04ng2lwNpAkAh8AgAIBAAAAAAAAAA-fiXNlY3AyNTZrMaEDscnRV6n1m-D9ID5UsURk0jsoKNXt1TIrj8uKOGW6iluDdWRwgiMohHVkcDaCI4I", "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", "enr:-LK4QA8FfhaAjlb_BXsXxSfiysR7R52Nhi9JBt4F8SPssu8hdE1BXQQEtVDC3qStCW60LSO7hEsVHv5zm8_6Vnjhcn0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAN4aBKJc2VjcDI1NmsxoQJerDhsJ-KxZ8sHySMOCmTO6sHM3iCFQ6VMvLTe948MyYN0Y3CCI4yDdWRwgiOM", "enr:-LK4QKWrXTpV9T78hNG6s8AM6IO4XH9kFT91uZtFg1GcsJ6dKovDOr1jtAAFPnS2lvNltkOGA9k29BUN7lFh_sjuc9QBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhANAdd-Jc2VjcDI1NmsxoQLQa6ai7y9PMN5hpLe5HmiJSlYzMuzP7ZhwRiwHvqNXdoN0Y3CCI4yDdWRwgiOM"]
StaticNodes = []
TrustedNodes = []
ListenAddr = ":30303"
DiscAddr = ""
EnableMsgEvents = false
[Node.HTTPTimeouts]
ReadTimeout = 30000000000
ReadHeaderTimeout = 30000000000
WriteTimeout = 30000000000
IdleTimeout = 120000000000
[Metrics]
HTTP = "127.0.0.1"
Port = 6060
InfluxDBEndpoint = "http://localhost:8086"
InfluxDBDatabase = "geth"
InfluxDBUsername = "test"
InfluxDBPassword = "test"
InfluxDBTags = "host=localhost"
InfluxDBToken = "test"
InfluxDBBucket = "geth"
InfluxDBOrganization = "geth"
以下是对这个geth.toml配置文件的详细解析:
一、[Eth] 部分
- NetworkId = 0:指定以太坊网络的 ID 为 0,表示主网。
- SyncMode = "snap":设置同步模式为 “snap”,可能与快速同步或特定的快照同步机制相关。
- EthDiscoveryURLs = []:以太坊发现服务的 URL 列表为空,表示可能不使用特定的外部发现服务。
- SnapDiscoveryURLs = []:与快照相关的发现服务 URL 列表为空。
- NoPruning = false:不启用不进行状态修剪,意味着默认会进行状态修剪以节省存储空间。
- NoPrefetch = false:不启用不预取数据,默认可能会进行数据预取以提高性能。
- TxLookupLimit = 2350000:交易查找限制为 2350000,可能用于限制交易查询的范围。
- TransactionHistory = 2350000:交易历史记录数量限制为 2350000。
- StateHistory = 90000:状态历史数量限制为 90000。
- LightPeers = 100:轻量级节点的数量限制为 100。
- DatabaseCache = 512:数据库缓存大小为 512。
- DatabaseFreezer = "":数据库冻结器的设置为空字符串,可能表示不使用特定的冻结机制。
- TrieCleanCache = 154:三态字典(trie)的干净缓存大小为 154。
- TrieDirtyCache = 256:三态字典的脏缓存大小为 256。
- TrieTimeout = 3600000000000:三态字典超时时间为 3600000000000(可能是特定时间单位)。
- SnapshotCache = 102:快照缓存大小为 102。
- Preimages = false:不启用预图像记录。
- FilterLogCacheSize = 32:过滤器日志缓存大小为 32。
- EnablePreimageRecording = false:不启用预图像记录功能。
- VMTrace = "":虚拟机跟踪设置为空字符串,表示可能不进行特定的虚拟机跟踪。
- VMTraceJsonConfig = "":虚拟机跟踪的 JSON 配置为空字符串。
- RPCGasCap = 50000000:RPC(远程过程调用)的 gas 上限为 50000000。
- RPCEVMTimeout = 5000000000:RPC EVM(以太坊虚拟机)超时时间为 5000000000(可能是特定时间单位)。
- RPCTxFeeCap = 1e+00:RPC 交易费用上限为 1e+00。
二、[Eth.Miner] 部分
- GasCeil = 30000000:矿工的 gas 上限为 30000000。
- GasPrice = 1000000:矿工设置的 gas 价格为 1000000。
- Recommit = 2000000000:重新提交的时间间隔或阈值(可能是特定时间单位)。
三、[Eth.TxPool] 部分
- Locals = []:本地交易列表为空。
- NoLocals = false:不启用不处理本地交易。
- Journal = "transactions.rlp":交易日志文件名为 “transactions.rlp”。
- Rejournal = 3600000000000:重新记录交易日志的时间间隔(可能是特定时间单位)。
- PriceLimit = 1:价格限制为 1。
- PriceBump = 10:价格提升幅度为 10。
- AccountSlots = 16:账户槽数量为 16。
- GlobalSlots = 5120:全局槽数量为 5120。
- AccountQueue = 64:账户队列长度为 64。
- GlobalQueue = 1024:全局队列长度为 1024。
- Lifetime = 10800000000000:交易在交易池中存活的时间(可能是特定时间单位)。
四、[Eth.BlobPool] 部分
- Datadir = "blobpool":数据目录为 “blobpool”,可能用于存储特定于 BlobPool 的数据。
- Datacap = 2684354560:数据容量限制为 2684354560。
- PriceBump = 100:价格提升幅度为 100,可能与 BlobPool 中的交易费用相关。
五、[Eth.GPO] 部分
- Blocks = 20:用于 gas 价格预测的区块数量为 20。
- Percentile = 60:百分位数设置为 60,可能用于确定 gas 价格的统计计算。
- MaxHeaderHistory = 1024:最大头部历史记录数量为 1024。
- MaxBlockHistory = 1024:最大区块历史记录数量为 1024。
- MaxPrice = 500000000000:最大 gas 价格为 500000000000。
- IgnorePrice = 2:忽略价格的阈值为 2。
六、[Node] 部分
- DataDir = "/root/.ethereum":节点的数据目录为 “/root/.ethereum”。
- IPCPath = "geth.ipc":进程间通信(IPC)的路径为 “geth.ipc”。
- HTTPHost = "":HTTP 服务的主机为空字符串,表示可能使用默认主机。
- HTTPPort = 8545:HTTP 服务的端口为 8545。
- HTTPVirtualHosts = ["localhost"]:HTTP 虚拟主机列表为 ["localhost"]。
- HTTPModules = ["net", "web3", "eth"]:HTTP 服务提供的模块为 ["net", "web3", "eth"]。
- AuthAddr = "localhost":认证服务的地址为 “localhost”。
- AuthPort = 8551:认证服务的端口为 8551。
- AuthVirtualHosts = ["localhost"]:认证虚拟主机列表为 ["localhost"]。
- WSHost = "":WebSocket 服务的主机为空字符串。
- WSPort = 8546:WebSocket 服务的端口为 8546。
- WSModules = ["net", "web3", "eth"]:WebSocket 服务提供的模块为 ["net", "web3", "eth"]。
- GraphQLVirtualHosts = ["localhost"]:GraphQL 虚拟主机列表为 ["localhost"]。
- BatchRequestLimit = 1000:批量请求的限制为 1000。
- BatchResponseMaxSize = 25000000:批量响应的最大大小为 25000000。
七、[Node.P2P] 部分
- MaxPeers = 50:最大对等节点数量为 50。
- NoDiscovery = false:不启用不进行节点发现。
- DiscoveryV4 = true:启用 IPv4 节点发现。
- BootstrapNodes和BootstrapNodesV5:分别列出了一系列的引导节点的 enode URL,用于在节点启动时连接到网络。
- StaticNodes = []:静态节点列表为空。
- TrustedNodes = []:受信任节点列表为空。
- ListenAddr = ":30303":节点监听的地址为 “:30303”。
- DiscAddr = "":发现服务的地址为空字符串。
- EnableMsgEvents = false:不启用消息事件。
八、[Node.HTTPTimeouts] 部分
- ReadTimeout = 30000000000:HTTP 读取超时时间为 30000000000(可能是特定时间单位)。
- ReadHeaderTimeout = 30000000000:HTTP 读取头部超时时间为 30000000000。
- WriteTimeout = 30000000000:HTTP 写入超时时间为 30000000000。
- IdleTimeout = 120000000000:HTTP 空闲超时时间为 120000000000。
九、[Metrics] 部分
- HTTP = "127.0.0.1":指标服务的 HTTP 地址为 “127.0.0.1”。
- Port = 6060:指标服务的端口为 6060。
- InfluxDBEndpoint = "http://localhost:8086":InfluxDB 端点地址为 “http://localhost:8086”。
- InfluxDBDatabase = "geth":InfluxDB 数据库名为 “geth”。
- InfluxDBUsername = "test":InfluxDB 的用户名是 “test”。
- InfluxDBPassword = "test":InfluxDB 的密码是 “test”。
- InfluxDBTags = "host=localhost":InfluxDB 的标签为 “host=localhost”。
- InfluxDBToken = "test":InfluxDB 的令牌是 “test”。
- InfluxDBBucket = "geth":InfluxDB 的存储桶名为 “geth”。
- InfluxDBOrganization = "geth":InfluxDB 的组织名为 “geth”。