mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 07:06:42 +00:00
internal/cli: added missing flags (#744)
* minor comment update * added support for rpc.evmtimeout flag * added support for vmdebug (EnablePreimageRecording) flag * added support for jsonrpc.auth.(jwtsecret, addr, port, vhosts) flags * added support for miner.recommit flag * added support for gpo.maxheaderhistory and gpo.maxblockhistory flag * Revert "added support for miner.recommit flag" This reverts commit fcb722e4bf5bdda23d4c91da40ab95c9023a80c3. * added pprof related flags (expect --pprof.cpuprofile - Write CPU profile to the given file) * added support for --dev.gaslimit flag * added support for --fdlimit flag * added support for --netrestrict flag * added support for --nodekey and --nodekeyhex flag * added support for --vmodule, --log.json, --log.backtrace, and --log.debug flags * fixed related lint errors * fix lints from develop (few lints decided to appear from code that was untouched, weird) * more weird lints from develop * small precautionary fix * small bug ;) fix in NetRestrict * weird lints * change vmdebug = true to vmdebug = false
This commit is contained in:
parent
71eadd09ca
commit
584856b52d
24 changed files with 768 additions and 35 deletions
|
|
@ -5,6 +5,7 @@ chain = "mainnet"
|
||||||
# chain = "mumbai"
|
# chain = "mumbai"
|
||||||
# identity = "Annon-Identity"
|
# identity = "Annon-Identity"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = "/var/lib/bor/keystore"
|
# keystore = "/var/lib/bor/keystore"
|
||||||
|
|
@ -16,6 +17,12 @@ syncmode = "full"
|
||||||
# devfakeauthor = false
|
# devfakeauthor = false
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
# maxpeers = 1
|
# maxpeers = 1
|
||||||
# nodiscover = true
|
# nodiscover = true
|
||||||
|
|
@ -23,6 +30,9 @@ syncmode = "full"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# port = 30303
|
# port = 30303
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
[p2p.discovery]
|
[p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
bootnodes = ["enode://0cb82b395094ee4a2915e9714894627de9ed8498fb881cec6db7c65e8b9a5bd7f2f25cc84e71e89d0947e51c76e85d0847de848c7782b13c0255247a6758178c@44.232.55.71:30303", "enode://88116f4295f5a31538ae409e4d44ad40d22e44ee9342869e7d68bdec55b0f83c1530355ce8b41fbec0928a7d75a5745d528450d30aec92066ab6ba1ee351d710@159.203.9.164:30303"]
|
bootnodes = ["enode://0cb82b395094ee4a2915e9714894627de9ed8498fb881cec6db7c65e8b9a5bd7f2f25cc84e71e89d0947e51c76e85d0847de848c7782b13c0255247a6758178c@44.232.55.71:30303", "enode://88116f4295f5a31538ae409e4d44ad40d22e44ee9342869e7d68bdec55b0f83c1530355ce8b41fbec0928a7d75a5745d528450d30aec92066ab6ba1ee351d710@159.203.9.164:30303"]
|
||||||
|
|
@ -65,6 +75,7 @@ syncmode = "full"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# ipcpath = ""
|
# ipcpath = ""
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
# [jsonrpc.http]
|
# [jsonrpc.http]
|
||||||
|
|
@ -89,6 +100,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -97,6 +113,8 @@ syncmode = "full"
|
||||||
[gpo]
|
[gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
ignoreprice = "30000000000"
|
ignoreprice = "30000000000"
|
||||||
|
|
||||||
|
|
@ -130,6 +148,7 @@ syncmode = "full"
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# triesinmemory = 128
|
# triesinmemory = 128
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
# allow-insecure-unlock = true
|
# allow-insecure-unlock = true
|
||||||
|
|
@ -144,3 +163,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -892,6 +892,7 @@ func TestTransactionGapFilling(t *testing.T) {
|
||||||
if queued != 1 {
|
if queued != 1 {
|
||||||
t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 1)
|
t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := validateEvents(events, 1); err != nil {
|
if err := validateEvents(events, 1); err != nil {
|
||||||
t.Fatalf("original event firing failed: %v", err)
|
t.Fatalf("original event firing failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
|
|
||||||
chain = "mainnet" # Name of the chain to sync ("mumbai", "mainnet") or path to a genesis file
|
chain = "mainnet" # Name of the chain to sync ("mumbai", "mainnet") or path to a genesis file
|
||||||
identity = "Annon-Identity" # Name/Identity of the node (default = OS hostname)
|
identity = "Annon-Identity" # Name/Identity of the node (default = OS hostname)
|
||||||
verbosity = 3 # Logging verbosity for the server (5=trace|4=debug|3=info|2=warn|1=error|0=crit) (`log-level` was replaced by `verbosity`, and thus will be deprecated soon)
|
verbosity = 3 # Logging verbosity for the server (5=trace|4=debug|3=info|2=warn|1=error|0=crit) (`log-level` was replaced by `verbosity`, and thus will be deprecated soon)
|
||||||
|
vmdebug = false # Record information useful for VM and contract debugging
|
||||||
datadir = "var/lib/bor" # Path of the data directory to store information
|
datadir = "var/lib/bor" # Path of the data directory to store information
|
||||||
ancient = "" # Data directory for ancient chain segments (default = inside chaindata)
|
ancient = "" # Data directory for ancient chain segments (default = inside chaindata)
|
||||||
keystore = "" # Path of the directory where keystores are located
|
keystore = "" # Path of the directory where keystores are located
|
||||||
|
|
@ -19,6 +20,12 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
"31000000" = "0x2087b9e2b353209c2c21e370c82daa12278efd0fe5f0febe6c29035352cf050e"
|
"31000000" = "0x2087b9e2b353209c2c21e370c82daa12278efd0fe5f0febe6c29035352cf050e"
|
||||||
"32000000" = "0x875500011e5eecc0c554f95d07b31cf59df4ca2505f4dbbfffa7d4e4da917c68"
|
"32000000" = "0x875500011e5eecc0c554f95d07b31cf59df4ca2505f4dbbfffa7d4e4da917c68"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
vmodule = "" # Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)
|
||||||
|
json = false # Format logs with JSON
|
||||||
|
backtrace = "" # Request a stack trace at a specific logging statement (e.g. "block.go:271")
|
||||||
|
debug = true # Prepends log messages with call-site location (file and line number) - {requires some effort}
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50 # Maximum number of network peers (network disabled if set to 0)
|
maxpeers = 50 # Maximum number of network peers (network disabled if set to 0)
|
||||||
maxpendpeers = 50 # Maximum number of pending connection attempts
|
maxpendpeers = 50 # Maximum number of pending connection attempts
|
||||||
|
|
@ -26,6 +33,9 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
port = 30303 # Network listening port
|
port = 30303 # Network listening port
|
||||||
nodiscover = false # Disables the peer discovery mechanism (manual peer addition)
|
nodiscover = false # Disables the peer discovery mechanism (manual peer addition)
|
||||||
nat = "any" # NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>)
|
nat = "any" # NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>)
|
||||||
|
netrestrict = "" # Restricts network communication to the given IP networks (CIDR masks)
|
||||||
|
nodekey = "" # P2P node key file
|
||||||
|
nodekeyhex = "" # P2P node key as hex
|
||||||
[p2p.discovery]
|
[p2p.discovery]
|
||||||
v5disc = false # Enables the experimental RLPx V5 (Topic Discovery) mechanism
|
v5disc = false # Enables the experimental RLPx V5 (Topic Discovery) mechanism
|
||||||
bootnodes = [] # Comma separated enode URLs for P2P discovery bootstrap
|
bootnodes = [] # Comma separated enode URLs for P2P discovery bootstrap
|
||||||
|
|
@ -65,6 +75,7 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
ipcdisable = false # Disable the IPC-RPC server
|
ipcdisable = false # Disable the IPC-RPC server
|
||||||
ipcpath = "" # Filename for IPC socket/pipe within the datadir (explicit paths escape it)
|
ipcpath = "" # Filename for IPC socket/pipe within the datadir (explicit paths escape it)
|
||||||
gascap = 50000000 # Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite)
|
gascap = 50000000 # Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite)
|
||||||
|
evmtimeout = "5s" # Sets a timeout used for eth_call (0=infinite)
|
||||||
txfeecap = 5.0 # Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)
|
txfeecap = 5.0 # Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)
|
||||||
allow-unprotected-txs = false # Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC (default: false)
|
allow-unprotected-txs = false # Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC (default: false)
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -89,6 +100,11 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
host = "" #
|
host = "" #
|
||||||
vhosts = ["localhost"] # Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.
|
vhosts = ["localhost"] # Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.
|
||||||
corsdomain = ["localhost"] # Comma separated list of domains from which to accept cross origin requests (browser enforced)
|
corsdomain = ["localhost"] # Comma separated list of domains from which to accept cross origin requests (browser enforced)
|
||||||
|
[jsonrpc.auth]
|
||||||
|
jwtsecret = "" # Path to a JWT secret to use for authenticated RPC endpoints
|
||||||
|
addr = "localhost" # Listening address for authenticated APIs
|
||||||
|
port = 8551 # Listening port for authenticated APIs
|
||||||
|
vhosts = ["localhost"] # Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.
|
||||||
[jsonrpc.timeouts]
|
[jsonrpc.timeouts]
|
||||||
read = "30s"
|
read = "30s"
|
||||||
write = "30s"
|
write = "30s"
|
||||||
|
|
@ -97,6 +113,8 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
[gpo]
|
[gpo]
|
||||||
blocks = 20 # Number of recent blocks to check for gas prices
|
blocks = 20 # Number of recent blocks to check for gas prices
|
||||||
percentile = 60 # Suggested gas price is the given percentile of a set of recent transaction gas prices
|
percentile = 60 # Suggested gas price is the given percentile of a set of recent transaction gas prices
|
||||||
|
maxheaderhistory = 1024 # Maximum header history of gasprice oracle
|
||||||
|
maxblockhistory = 1024 # Maximum block history of gasprice oracle
|
||||||
maxprice = "5000000000000" # Maximum gas price will be recommended by gpo
|
maxprice = "5000000000000" # Maximum gas price will be recommended by gpo
|
||||||
ignoreprice = "2" # Gas price below which gpo will ignore transactions (recommended for mainnet = 30000000000, default suitable for mumbai/devnet)
|
ignoreprice = "2" # Gas price below which gpo will ignore transactions (recommended for mainnet = 30000000000, default suitable for mumbai/devnet)
|
||||||
|
|
||||||
|
|
@ -134,6 +152,7 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
txlookuplimit = 2350000 # Number of recent blocks to maintain transactions index for (default = about 56 days, 0 = entire chain)
|
txlookuplimit = 2350000 # Number of recent blocks to maintain transactions index for (default = about 56 days, 0 = entire chain)
|
||||||
triesinmemory = 128 # Number of block states (tries) to keep in memory
|
triesinmemory = 128 # Number of block states (tries) to keep in memory
|
||||||
timeout = "1h0m0s" # Time after which the Merkle Patricia Trie is stored to disc from memory
|
timeout = "1h0m0s" # Time after which the Merkle Patricia Trie is stored to disc from memory
|
||||||
|
fdlimit = 0 # Raise the open file descriptor resource limit (default = system fd limit)
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
unlock = [] # Comma separated list of accounts to unlock
|
unlock = [] # Comma separated list of accounts to unlock
|
||||||
|
|
@ -146,5 +165,13 @@ devfakeauthor = false # Run miner without validator set authorization [de
|
||||||
addr = ":3131" # Address and port to bind the GRPC server
|
addr = ":3131" # Address and port to bind the GRPC server
|
||||||
|
|
||||||
[developer]
|
[developer]
|
||||||
dev = false # Enable developer mode with ephemeral proof-of-authority network and a pre-funded developer account, mining enabled
|
dev = false # Enable developer mode with ephemeral proof-of-authority network and a pre-funded developer account, mining enabled
|
||||||
period = 0 # Block period to use in developer mode (0 = mine only if transaction pending)
|
period = 0 # Block period to use in developer mode (0 = mine only if transaction pending)
|
||||||
|
gaslimit = 11500000 # Initial block gas limit
|
||||||
|
|
||||||
|
[pprof]
|
||||||
|
pprof = false # Enable the pprof HTTP server
|
||||||
|
port = 6060 # pprof HTTP server listening port
|
||||||
|
addr = "127.0.0.1" # pprof HTTP server listening interface
|
||||||
|
memprofilerate = 524288 # Turn on memory profiling with the given rate
|
||||||
|
blockprofilerate = 0 # Turn on block profiling with the given rate
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,13 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```datadir```: Path of the data directory to store information
|
- ```datadir```: Path of the data directory to store information
|
||||||
|
|
||||||
|
- ```vmdebug```: Record information useful for VM and contract debugging (default: false)
|
||||||
|
|
||||||
- ```datadir.ancient```: Data directory for ancient chain segments (default = inside chaindata)
|
- ```datadir.ancient```: Data directory for ancient chain segments (default = inside chaindata)
|
||||||
|
|
||||||
- ```keystore```: Path of the directory where keystores are located
|
- ```keystore```: Path of the directory where keystores are located
|
||||||
|
|
||||||
- ```config```: File for the config file
|
- ```config```: Path to the TOML configuration file
|
||||||
|
|
||||||
- ```syncmode```: Blockchain sync mode (only "full" sync supported) (default: full)
|
- ```syncmode```: Blockchain sync mode (only "full" sync supported) (default: full)
|
||||||
|
|
||||||
|
|
@ -48,6 +50,10 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```gpo.percentile```: Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60)
|
- ```gpo.percentile```: Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60)
|
||||||
|
|
||||||
|
- ```gpo.maxheaderhistory```: Maximum header history of gasprice oracle (default: 1024)
|
||||||
|
|
||||||
|
- ```gpo.maxblockhistory```: Maximum block history of gasprice oracle (default: 1024)
|
||||||
|
|
||||||
- ```gpo.maxprice```: Maximum gas price will be recommended by gpo (default: 5000000000000)
|
- ```gpo.maxprice```: Maximum gas price will be recommended by gpo (default: 5000000000000)
|
||||||
|
|
||||||
- ```gpo.ignoreprice```: Gas price below which gpo will ignore transactions (default: 2)
|
- ```gpo.ignoreprice```: Gas price below which gpo will ignore transactions (default: 2)
|
||||||
|
|
@ -60,6 +66,18 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```dev.period```: Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)
|
- ```dev.period```: Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)
|
||||||
|
|
||||||
|
- ```dev.gaslimit```: Initial block gas limit (default: 11500000)
|
||||||
|
|
||||||
|
- ```pprof```: Enable the pprof HTTP server (default: false)
|
||||||
|
|
||||||
|
- ```pprof.port```: pprof HTTP server listening port (default: 6060)
|
||||||
|
|
||||||
|
- ```pprof.addr```: pprof HTTP server listening interface (default: 127.0.0.1)
|
||||||
|
|
||||||
|
- ```pprof.memprofilerate```: Turn on memory profiling with the given rate (default: 524288)
|
||||||
|
|
||||||
|
- ```pprof.blockprofilerate```: Turn on block profiling with the given rate (default: 0)
|
||||||
|
|
||||||
### Account Management Options
|
### Account Management Options
|
||||||
|
|
||||||
- ```unlock```: Comma separated list of accounts to unlock
|
- ```unlock```: Comma separated list of accounts to unlock
|
||||||
|
|
@ -94,10 +112,14 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```txlookuplimit```: Number of recent blocks to maintain transactions index for (default: 2350000)
|
- ```txlookuplimit```: Number of recent blocks to maintain transactions index for (default: 2350000)
|
||||||
|
|
||||||
|
- ```fdlimit```: Raise the open file descriptor resource limit (default = system fd limit) (default: 0)
|
||||||
|
|
||||||
### JsonRPC Options
|
### JsonRPC Options
|
||||||
|
|
||||||
- ```rpc.gascap```: Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) (default: 50000000)
|
- ```rpc.gascap```: Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) (default: 50000000)
|
||||||
|
|
||||||
|
- ```rpc.evmtimeout```: Sets a timeout used for eth_call (0=infinite) (default: 5s)
|
||||||
|
|
||||||
- ```rpc.txfeecap```: Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 5)
|
- ```rpc.txfeecap```: Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 5)
|
||||||
|
|
||||||
- ```rpc.allow-unprotected-txs```: Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC (default: false)
|
- ```rpc.allow-unprotected-txs```: Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC (default: false)
|
||||||
|
|
@ -106,6 +128,14 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```ipcpath```: Filename for IPC socket/pipe within the datadir (explicit paths escape it)
|
- ```ipcpath```: Filename for IPC socket/pipe within the datadir (explicit paths escape it)
|
||||||
|
|
||||||
|
- ```authrpc.jwtsecret```: Path to a JWT secret to use for authenticated RPC endpoints
|
||||||
|
|
||||||
|
- ```authrpc.addr```: Listening address for authenticated APIs (default: localhost)
|
||||||
|
|
||||||
|
- ```authrpc.port```: Listening port for authenticated APIs (default: 8551)
|
||||||
|
|
||||||
|
- ```authrpc.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: localhost)
|
||||||
|
|
||||||
- ```http.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) (default: localhost)
|
- ```http.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) (default: localhost)
|
||||||
|
|
||||||
- ```http.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: localhost)
|
- ```http.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: localhost)
|
||||||
|
|
@ -138,6 +168,16 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```graphql```: Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. (default: false)
|
- ```graphql```: Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. (default: false)
|
||||||
|
|
||||||
|
### Logging Options
|
||||||
|
|
||||||
|
- ```vmodule```: Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)
|
||||||
|
|
||||||
|
- ```log.json```: Format logs with JSON (default: false)
|
||||||
|
|
||||||
|
- ```log.backtrace```: Request a stack trace at a specific logging statement (e.g. 'block.go:271')
|
||||||
|
|
||||||
|
- ```log.debug```: Prepends log messages with call-site location (file and line number) (default: false)
|
||||||
|
|
||||||
### P2P Options
|
### P2P Options
|
||||||
|
|
||||||
- ```bind```: Network binding address (default: 0.0.0.0)
|
- ```bind```: Network binding address (default: 0.0.0.0)
|
||||||
|
|
@ -152,6 +192,12 @@ The ```bor server``` command runs the Bor client.
|
||||||
|
|
||||||
- ```nat```: NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>) (default: any)
|
- ```nat```: NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>) (default: any)
|
||||||
|
|
||||||
|
- ```netrestrict```: Restricts network communication to the given IP networks (CIDR masks)
|
||||||
|
|
||||||
|
- ```nodekey```: P2P node key file
|
||||||
|
|
||||||
|
- ```nodekeyhex```: P2P node key as hex
|
||||||
|
|
||||||
- ```nodiscover```: Disables the peer discovery mechanism (manual peer addition) (default: false)
|
- ```nodiscover```: Disables the peer discovery mechanism (manual peer addition) (default: false)
|
||||||
|
|
||||||
- ```v5disc```: Enables the experimental RLPx V5 (Topic Discovery) mechanism (default: false)
|
- ```v5disc```: Enables the experimental RLPx V5 (Topic Discovery) mechanism (default: false)
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ func (api *PublicFilterAPI) NewDeposits(ctx context.Context, crit ethereum.State
|
||||||
stateSyncData := make(chan *types.StateSyncData, 10)
|
stateSyncData := make(chan *types.StateSyncData, 10)
|
||||||
stateSyncSub := api.events.SubscribeNewDeposits(stateSyncData)
|
stateSyncSub := api.events.SubscribeNewDeposits(stateSyncData)
|
||||||
|
|
||||||
|
// nolint: gosimple
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case h := <-stateSyncData:
|
case h := <-stateSyncData:
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ func TestCommand_DebugBlock(t *testing.T) {
|
||||||
|
|
||||||
// enable developer mode
|
// enable developer mode
|
||||||
config.Developer.Enabled = true
|
config.Developer.Enabled = true
|
||||||
config.Developer.Period = 2 // block time
|
config.Developer.Period = 2 // block time
|
||||||
|
config.Developer.GasLimit = 11500000 // initial block gaslimit
|
||||||
|
|
||||||
// enable archive mode for getting traces of ancient blocks
|
// enable archive mode for getting traces of ancient blocks
|
||||||
config.GcMode = "archive"
|
config.GcMode = "archive"
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ func (c *DumpconfigCommand) Run(args []string) int {
|
||||||
userConfig := command.GetConfig()
|
userConfig := command.GetConfig()
|
||||||
|
|
||||||
// convert the big.Int and time.Duration fields to their corresponding Raw fields
|
// convert the big.Int and time.Duration fields to their corresponding Raw fields
|
||||||
|
userConfig.JsonRPC.RPCEVMTimeoutRaw = userConfig.JsonRPC.RPCEVMTimeout.String()
|
||||||
userConfig.JsonRPC.HttpTimeout.ReadTimeoutRaw = userConfig.JsonRPC.HttpTimeout.ReadTimeout.String()
|
userConfig.JsonRPC.HttpTimeout.ReadTimeoutRaw = userConfig.JsonRPC.HttpTimeout.ReadTimeout.String()
|
||||||
userConfig.JsonRPC.HttpTimeout.WriteTimeoutRaw = userConfig.JsonRPC.HttpTimeout.WriteTimeout.String()
|
userConfig.JsonRPC.HttpTimeout.WriteTimeoutRaw = userConfig.JsonRPC.HttpTimeout.WriteTimeout.String()
|
||||||
userConfig.JsonRPC.HttpTimeout.IdleTimeoutRaw = userConfig.JsonRPC.HttpTimeout.IdleTimeout.String()
|
userConfig.JsonRPC.HttpTimeout.IdleTimeoutRaw = userConfig.JsonRPC.HttpTimeout.IdleTimeout.String()
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetDeveloperChain returns the developer mode configs.
|
// GetDeveloperChain returns the developer mode configs.
|
||||||
func GetDeveloperChain(period uint64, faucet common.Address) *Chain {
|
func GetDeveloperChain(period uint64, gasLimitt uint64, faucet common.Address) *Chain {
|
||||||
// Override the default period to the user requested one
|
// Override the default period to the user requested one
|
||||||
config := *params.AllCliqueProtocolChanges
|
config := *params.AllCliqueProtocolChanges
|
||||||
config.Clique = ¶ms.CliqueConfig{
|
config.Clique = ¶ms.CliqueConfig{
|
||||||
|
|
@ -26,7 +26,7 @@ func GetDeveloperChain(period uint64, faucet common.Address) *Chain {
|
||||||
Genesis: &core.Genesis{
|
Genesis: &core.Genesis{
|
||||||
Config: &config,
|
Config: &config,
|
||||||
ExtraData: append(append(make([]byte, 32), faucet[:]...), make([]byte, crypto.SignatureLength)...),
|
ExtraData: append(append(make([]byte, 32), faucet[:]...), make([]byte, crypto.SignatureLength)...),
|
||||||
GasLimit: 11500000,
|
GasLimit: gasLimitt,
|
||||||
BaseFee: big.NewInt(params.InitialBaseFee),
|
BaseFee: big.NewInt(params.InitialBaseFee),
|
||||||
Difficulty: big.NewInt(1),
|
Difficulty: big.NewInt(1),
|
||||||
Alloc: map[common.Address]core.GenesisAccount{
|
Alloc: map[common.Address]core.GenesisAccount{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/ecdsa"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math"
|
"math"
|
||||||
|
|
@ -24,6 +25,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/cmd/utils"
|
"github.com/ethereum/go-ethereum/cmd/utils"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/fdlimit"
|
"github.com/ethereum/go-ethereum/common/fdlimit"
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/eth/downloader"
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
||||||
"github.com/ethereum/go-ethereum/eth/ethconfig"
|
"github.com/ethereum/go-ethereum/eth/ethconfig"
|
||||||
"github.com/ethereum/go-ethereum/eth/gasprice"
|
"github.com/ethereum/go-ethereum/eth/gasprice"
|
||||||
|
|
@ -33,6 +35,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
"github.com/ethereum/go-ethereum/p2p/nat"
|
"github.com/ethereum/go-ethereum/p2p/nat"
|
||||||
|
"github.com/ethereum/go-ethereum/p2p/netutil"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
)
|
)
|
||||||
|
|
@ -55,6 +58,9 @@ type Config struct {
|
||||||
// LogLevel is the level of the logs to put out
|
// LogLevel is the level of the logs to put out
|
||||||
LogLevel string `hcl:"log-level,optional" toml:"log-level,optional"`
|
LogLevel string `hcl:"log-level,optional" toml:"log-level,optional"`
|
||||||
|
|
||||||
|
// Record information useful for VM and contract debugging
|
||||||
|
EnablePreimageRecording bool `hcl:"vmdebug,optional" toml:"vmdebug,optional"`
|
||||||
|
|
||||||
// DataDir is the directory to store the state in
|
// DataDir is the directory to store the state in
|
||||||
DataDir string `hcl:"datadir,optional" toml:"datadir,optional"`
|
DataDir string `hcl:"datadir,optional" toml:"datadir,optional"`
|
||||||
|
|
||||||
|
|
@ -79,6 +85,9 @@ type Config struct {
|
||||||
// Ethstats is the address of the ethstats server to send telemetry
|
// Ethstats is the address of the ethstats server to send telemetry
|
||||||
Ethstats string `hcl:"ethstats,optional" toml:"ethstats,optional"`
|
Ethstats string `hcl:"ethstats,optional" toml:"ethstats,optional"`
|
||||||
|
|
||||||
|
// Logging has the logging related settings
|
||||||
|
Logging *LoggingConfig `hcl:"log,block" toml:"log,block"`
|
||||||
|
|
||||||
// P2P has the p2p network related settings
|
// P2P has the p2p network related settings
|
||||||
P2P *P2PConfig `hcl:"p2p,block" toml:"p2p,block"`
|
P2P *P2PConfig `hcl:"p2p,block" toml:"p2p,block"`
|
||||||
|
|
||||||
|
|
@ -114,6 +123,47 @@ type Config struct {
|
||||||
|
|
||||||
// Develop Fake Author mode to produce blocks without authorisation
|
// Develop Fake Author mode to produce blocks without authorisation
|
||||||
DevFakeAuthor bool `hcl:"devfakeauthor,optional" toml:"devfakeauthor,optional"`
|
DevFakeAuthor bool `hcl:"devfakeauthor,optional" toml:"devfakeauthor,optional"`
|
||||||
|
|
||||||
|
// Pprof has the pprof related settings
|
||||||
|
Pprof *PprofConfig `hcl:"pprof,block" toml:"pprof,block"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type LoggingConfig struct {
|
||||||
|
// Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)
|
||||||
|
Vmodule string `hcl:"vmodule,optional" toml:"vmodule,optional"`
|
||||||
|
|
||||||
|
// Format logs with JSON
|
||||||
|
Json bool `hcl:"json,optional" toml:"json,optional"`
|
||||||
|
|
||||||
|
// Request a stack trace at a specific logging statement (e.g. "block.go:271")
|
||||||
|
Backtrace string `hcl:"backtrace,optional" toml:"backtrace,optional"`
|
||||||
|
|
||||||
|
// Prepends log messages with call-site location (file and line number)
|
||||||
|
Debug bool `hcl:"debug,optional" toml:"debug,optional"`
|
||||||
|
|
||||||
|
// TODO - implement this
|
||||||
|
// // Write execution trace to the given file
|
||||||
|
// Trace string `hcl:"trace,optional" toml:"trace,optional"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PprofConfig struct {
|
||||||
|
// Enableed enable the pprof HTTP server
|
||||||
|
Enabled bool `hcl:"pprof,optional" toml:"pprof,optional"`
|
||||||
|
|
||||||
|
// pprof HTTP server listening port
|
||||||
|
Port int `hcl:"port,optional" toml:"port,optional"`
|
||||||
|
|
||||||
|
// pprof HTTP server listening interface
|
||||||
|
Addr string `hcl:"addr,optional" toml:"addr,optional"`
|
||||||
|
|
||||||
|
// Turn on memory profiling with the given rate
|
||||||
|
MemProfileRate int `hcl:"memprofilerate,optional" toml:"memprofilerate,optional"`
|
||||||
|
|
||||||
|
// Turn on block profiling with the given rate
|
||||||
|
BlockProfileRate int `hcl:"blockprofilerate,optional" toml:"blockprofilerate,optional"`
|
||||||
|
|
||||||
|
// // Write CPU profile to the given file
|
||||||
|
// CPUProfile string `hcl:"cpuprofile,optional" toml:"cpuprofile,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type P2PConfig struct {
|
type P2PConfig struct {
|
||||||
|
|
@ -135,6 +185,17 @@ type P2PConfig struct {
|
||||||
// NAT it used to set NAT options
|
// NAT it used to set NAT options
|
||||||
NAT string `hcl:"nat,optional" toml:"nat,optional"`
|
NAT string `hcl:"nat,optional" toml:"nat,optional"`
|
||||||
|
|
||||||
|
// Connectivity can be restricted to certain IP networks.
|
||||||
|
// If this option is set to a non-nil value, only hosts which match one of the
|
||||||
|
// IP networks contained in the list are considered.
|
||||||
|
NetRestrict string `hcl:"netrestrict,optional" toml:"netrestrict,optional"`
|
||||||
|
|
||||||
|
// P2P node key file
|
||||||
|
NodeKey string `hcl:"nodekey,optional" toml:"nodekey,optional"`
|
||||||
|
|
||||||
|
// P2P node key as hex
|
||||||
|
NodeKeyHex string `hcl:"nodekeyhex,optional" toml:"nodekeyhex,optional"`
|
||||||
|
|
||||||
// Discovery has the p2p discovery related settings
|
// Discovery has the p2p discovery related settings
|
||||||
Discovery *P2PDiscovery `hcl:"discovery,block" toml:"discovery,block"`
|
Discovery *P2PDiscovery `hcl:"discovery,block" toml:"discovery,block"`
|
||||||
}
|
}
|
||||||
|
|
@ -251,6 +312,10 @@ type JsonRPCConfig struct {
|
||||||
// GasCap is the global gas cap for eth-call variants.
|
// GasCap is the global gas cap for eth-call variants.
|
||||||
GasCap uint64 `hcl:"gascap,optional" toml:"gascap,optional"`
|
GasCap uint64 `hcl:"gascap,optional" toml:"gascap,optional"`
|
||||||
|
|
||||||
|
// Sets a timeout used for eth_call (0=infinite)
|
||||||
|
RPCEVMTimeout time.Duration `hcl:"-,optional" toml:"-"`
|
||||||
|
RPCEVMTimeoutRaw string `hcl:"evmtimeout,optional" toml:"evmtimeout,optional"`
|
||||||
|
|
||||||
// TxFeeCap is the global transaction fee cap for send-transaction variants
|
// TxFeeCap is the global transaction fee cap for send-transaction variants
|
||||||
TxFeeCap float64 `hcl:"txfeecap,optional" toml:"txfeecap,optional"`
|
TxFeeCap float64 `hcl:"txfeecap,optional" toml:"txfeecap,optional"`
|
||||||
|
|
||||||
|
|
@ -263,11 +328,29 @@ type JsonRPCConfig struct {
|
||||||
// Graphql has the json-rpc graphql related settings
|
// Graphql has the json-rpc graphql related settings
|
||||||
Graphql *APIConfig `hcl:"graphql,block" toml:"graphql,block"`
|
Graphql *APIConfig `hcl:"graphql,block" toml:"graphql,block"`
|
||||||
|
|
||||||
|
// AUTH RPC related settings
|
||||||
|
Auth *AUTHConfig `hcl:"auth,block" toml:"auth,block"`
|
||||||
|
|
||||||
HttpTimeout *HttpTimeouts `hcl:"timeouts,block" toml:"timeouts,block"`
|
HttpTimeout *HttpTimeouts `hcl:"timeouts,block" toml:"timeouts,block"`
|
||||||
|
|
||||||
AllowUnprotectedTxs bool `hcl:"allow-unprotected-txs,optional" toml:"allow-unprotected-txs,optional"`
|
AllowUnprotectedTxs bool `hcl:"allow-unprotected-txs,optional" toml:"allow-unprotected-txs,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AUTHConfig struct {
|
||||||
|
// JWTSecret is the hex-encoded jwt secret.
|
||||||
|
JWTSecret string `hcl:"jwtsecret,optional" toml:"jwtsecret,optional"`
|
||||||
|
|
||||||
|
// Addr is the listening address on which authenticated APIs are provided.
|
||||||
|
Addr string `hcl:"addr,optional" toml:"addr,optional"`
|
||||||
|
|
||||||
|
// Port is the port number on which authenticated APIs are provided.
|
||||||
|
Port uint64 `hcl:"port,optional" toml:"port,optional"`
|
||||||
|
|
||||||
|
// VHosts is the list of virtual hostnames which are allowed on incoming requests
|
||||||
|
// for the authenticated api. This is by default {'localhost'}.
|
||||||
|
VHosts []string `hcl:"vhosts,optional" toml:"vhosts,optional"`
|
||||||
|
}
|
||||||
|
|
||||||
type GRPCConfig struct {
|
type GRPCConfig struct {
|
||||||
// Addr is the bind address for the grpc rpc server
|
// Addr is the bind address for the grpc rpc server
|
||||||
Addr string `hcl:"addr,optional" toml:"addr,optional"`
|
Addr string `hcl:"addr,optional" toml:"addr,optional"`
|
||||||
|
|
@ -333,6 +416,12 @@ type GpoConfig struct {
|
||||||
// Percentile sets the weights to new blocks
|
// Percentile sets the weights to new blocks
|
||||||
Percentile uint64 `hcl:"percentile,optional" toml:"percentile,optional"`
|
Percentile uint64 `hcl:"percentile,optional" toml:"percentile,optional"`
|
||||||
|
|
||||||
|
// Maximum header history of gasprice oracle
|
||||||
|
MaxHeaderHistory int `hcl:"maxheaderhistory,optional" toml:"maxheaderhistory,optional"`
|
||||||
|
|
||||||
|
// Maximum block history of gasprice oracle
|
||||||
|
MaxBlockHistory int `hcl:"maxblockhistory,optional" toml:"maxblockhistory,optional"`
|
||||||
|
|
||||||
// MaxPrice is an upper bound gas price
|
// MaxPrice is an upper bound gas price
|
||||||
MaxPrice *big.Int `hcl:"-,optional" toml:"-"`
|
MaxPrice *big.Int `hcl:"-,optional" toml:"-"`
|
||||||
MaxPriceRaw string `hcl:"maxprice,optional" toml:"maxprice,optional"`
|
MaxPriceRaw string `hcl:"maxprice,optional" toml:"maxprice,optional"`
|
||||||
|
|
@ -428,6 +517,9 @@ type CacheConfig struct {
|
||||||
// Time after which the Merkle Patricia Trie is stored to disc from memory
|
// Time after which the Merkle Patricia Trie is stored to disc from memory
|
||||||
TrieTimeout time.Duration `hcl:"-,optional" toml:"-"`
|
TrieTimeout time.Duration `hcl:"-,optional" toml:"-"`
|
||||||
TrieTimeoutRaw string `hcl:"timeout,optional" toml:"timeout,optional"`
|
TrieTimeoutRaw string `hcl:"timeout,optional" toml:"timeout,optional"`
|
||||||
|
|
||||||
|
// Raise the open file descriptor resource limit (default = system fd limit)
|
||||||
|
FDLimit int `hcl:"fdlimit,optional" toml:"fdlimit,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AccountsConfig struct {
|
type AccountsConfig struct {
|
||||||
|
|
@ -453,17 +545,27 @@ type DeveloperConfig struct {
|
||||||
|
|
||||||
// Period is the block period to use in developer mode
|
// Period is the block period to use in developer mode
|
||||||
Period uint64 `hcl:"period,optional" toml:"period,optional"`
|
Period uint64 `hcl:"period,optional" toml:"period,optional"`
|
||||||
|
|
||||||
|
// Initial block gas limit
|
||||||
|
GasLimit uint64 `hcl:"gaslimit,optional" toml:"gaslimit,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultConfig() *Config {
|
func DefaultConfig() *Config {
|
||||||
return &Config{
|
return &Config{
|
||||||
Chain: "mainnet",
|
Chain: "mainnet",
|
||||||
Identity: Hostname(),
|
Identity: Hostname(),
|
||||||
RequiredBlocks: map[string]string{},
|
RequiredBlocks: map[string]string{},
|
||||||
Verbosity: 3,
|
Verbosity: 3,
|
||||||
LogLevel: "",
|
LogLevel: "",
|
||||||
DataDir: DefaultDataDir(),
|
EnablePreimageRecording: false,
|
||||||
Ancient: "",
|
DataDir: DefaultDataDir(),
|
||||||
|
Ancient: "",
|
||||||
|
Logging: &LoggingConfig{
|
||||||
|
Vmodule: "",
|
||||||
|
Json: false,
|
||||||
|
Backtrace: "",
|
||||||
|
Debug: false,
|
||||||
|
},
|
||||||
P2P: &P2PConfig{
|
P2P: &P2PConfig{
|
||||||
MaxPeers: 50,
|
MaxPeers: 50,
|
||||||
MaxPendPeers: 50,
|
MaxPendPeers: 50,
|
||||||
|
|
@ -471,6 +573,7 @@ func DefaultConfig() *Config {
|
||||||
Port: 30303,
|
Port: 30303,
|
||||||
NoDiscover: false,
|
NoDiscover: false,
|
||||||
NAT: "any",
|
NAT: "any",
|
||||||
|
NetRestrict: "",
|
||||||
Discovery: &P2PDiscovery{
|
Discovery: &P2PDiscovery{
|
||||||
V5Enabled: false,
|
V5Enabled: false,
|
||||||
Bootnodes: []string{},
|
Bootnodes: []string{},
|
||||||
|
|
@ -512,16 +615,19 @@ func DefaultConfig() *Config {
|
||||||
Recommit: 125 * time.Second,
|
Recommit: 125 * time.Second,
|
||||||
},
|
},
|
||||||
Gpo: &GpoConfig{
|
Gpo: &GpoConfig{
|
||||||
Blocks: 20,
|
Blocks: 20,
|
||||||
Percentile: 60,
|
Percentile: 60,
|
||||||
MaxPrice: gasprice.DefaultMaxPrice,
|
MaxHeaderHistory: 1024,
|
||||||
IgnorePrice: gasprice.DefaultIgnorePrice,
|
MaxBlockHistory: 1024,
|
||||||
|
MaxPrice: gasprice.DefaultMaxPrice,
|
||||||
|
IgnorePrice: gasprice.DefaultIgnorePrice,
|
||||||
},
|
},
|
||||||
JsonRPC: &JsonRPCConfig{
|
JsonRPC: &JsonRPCConfig{
|
||||||
IPCDisable: false,
|
IPCDisable: false,
|
||||||
IPCPath: "",
|
IPCPath: "",
|
||||||
GasCap: ethconfig.Defaults.RPCGasCap,
|
GasCap: ethconfig.Defaults.RPCGasCap,
|
||||||
TxFeeCap: ethconfig.Defaults.RPCTxFeeCap,
|
TxFeeCap: ethconfig.Defaults.RPCTxFeeCap,
|
||||||
|
RPCEVMTimeout: ethconfig.Defaults.RPCEVMTimeout,
|
||||||
AllowUnprotectedTxs: false,
|
AllowUnprotectedTxs: false,
|
||||||
Http: &APIConfig{
|
Http: &APIConfig{
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
|
|
@ -550,6 +656,12 @@ func DefaultConfig() *Config {
|
||||||
WriteTimeout: 30 * time.Second,
|
WriteTimeout: 30 * time.Second,
|
||||||
IdleTimeout: 120 * time.Second,
|
IdleTimeout: 120 * time.Second,
|
||||||
},
|
},
|
||||||
|
Auth: &AUTHConfig{
|
||||||
|
JWTSecret: "",
|
||||||
|
Port: node.DefaultAuthPort,
|
||||||
|
Addr: node.DefaultAuthHost,
|
||||||
|
VHosts: node.DefaultAuthVhosts,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Ethstats: "",
|
Ethstats: "",
|
||||||
Telemetry: &TelemetryConfig{
|
Telemetry: &TelemetryConfig{
|
||||||
|
|
@ -583,6 +695,7 @@ func DefaultConfig() *Config {
|
||||||
TxLookupLimit: 2350000,
|
TxLookupLimit: 2350000,
|
||||||
TriesInMemory: 128,
|
TriesInMemory: 128,
|
||||||
TrieTimeout: 60 * time.Minute,
|
TrieTimeout: 60 * time.Minute,
|
||||||
|
FDLimit: 0,
|
||||||
},
|
},
|
||||||
Accounts: &AccountsConfig{
|
Accounts: &AccountsConfig{
|
||||||
Unlock: []string{},
|
Unlock: []string{},
|
||||||
|
|
@ -595,10 +708,19 @@ func DefaultConfig() *Config {
|
||||||
Addr: ":3131",
|
Addr: ":3131",
|
||||||
},
|
},
|
||||||
Developer: &DeveloperConfig{
|
Developer: &DeveloperConfig{
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
Period: 0,
|
Period: 0,
|
||||||
|
GasLimit: 11500000,
|
||||||
},
|
},
|
||||||
DevFakeAuthor: false,
|
DevFakeAuthor: false,
|
||||||
|
Pprof: &PprofConfig{
|
||||||
|
Enabled: false,
|
||||||
|
Port: 6060,
|
||||||
|
Addr: "127.0.0.1",
|
||||||
|
MemProfileRate: 512 * 1024,
|
||||||
|
BlockProfileRate: 0,
|
||||||
|
// CPUProfile: "",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -643,6 +765,7 @@ func (c *Config) fillTimeDurations() error {
|
||||||
td *time.Duration
|
td *time.Duration
|
||||||
str *string
|
str *string
|
||||||
}{
|
}{
|
||||||
|
{"jsonrpc.evmtimeout", &c.JsonRPC.RPCEVMTimeout, &c.JsonRPC.RPCEVMTimeoutRaw},
|
||||||
{"miner.recommit", &c.Sealer.Recommit, &c.Sealer.RecommitRaw},
|
{"miner.recommit", &c.Sealer.Recommit, &c.Sealer.RecommitRaw},
|
||||||
{"jsonrpc.timeouts.read", &c.JsonRPC.HttpTimeout.ReadTimeout, &c.JsonRPC.HttpTimeout.ReadTimeoutRaw},
|
{"jsonrpc.timeouts.read", &c.JsonRPC.HttpTimeout.ReadTimeout, &c.JsonRPC.HttpTimeout.ReadTimeoutRaw},
|
||||||
{"jsonrpc.timeouts.write", &c.JsonRPC.HttpTimeout.WriteTimeout, &c.JsonRPC.HttpTimeout.WriteTimeoutRaw},
|
{"jsonrpc.timeouts.write", &c.JsonRPC.HttpTimeout.WriteTimeout, &c.JsonRPC.HttpTimeout.WriteTimeoutRaw},
|
||||||
|
|
@ -713,7 +836,7 @@ func (c *Config) loadChain() error {
|
||||||
|
|
||||||
//nolint:gocognit
|
//nolint:gocognit
|
||||||
func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*ethconfig.Config, error) {
|
func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*ethconfig.Config, error) {
|
||||||
dbHandles, err := MakeDatabaseHandles()
|
dbHandles, err := MakeDatabaseHandles(c.Cache.FDLimit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -744,10 +867,14 @@ func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*
|
||||||
{
|
{
|
||||||
n.GPO.Blocks = int(c.Gpo.Blocks)
|
n.GPO.Blocks = int(c.Gpo.Blocks)
|
||||||
n.GPO.Percentile = int(c.Gpo.Percentile)
|
n.GPO.Percentile = int(c.Gpo.Percentile)
|
||||||
|
n.GPO.MaxHeaderHistory = c.Gpo.MaxHeaderHistory
|
||||||
|
n.GPO.MaxBlockHistory = c.Gpo.MaxBlockHistory
|
||||||
n.GPO.MaxPrice = c.Gpo.MaxPrice
|
n.GPO.MaxPrice = c.Gpo.MaxPrice
|
||||||
n.GPO.IgnorePrice = c.Gpo.IgnorePrice
|
n.GPO.IgnorePrice = c.Gpo.IgnorePrice
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.EnablePreimageRecording = c.EnablePreimageRecording
|
||||||
|
|
||||||
// txpool options
|
// txpool options
|
||||||
{
|
{
|
||||||
n.TxPool.NoLocals = c.TxPool.NoLocals
|
n.TxPool.NoLocals = c.TxPool.NoLocals
|
||||||
|
|
@ -838,7 +965,7 @@ func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*
|
||||||
n.Miner.Etherbase = developer.Address
|
n.Miner.Etherbase = developer.Address
|
||||||
|
|
||||||
// get developer mode chain config
|
// get developer mode chain config
|
||||||
c.chain = chains.GetDeveloperChain(c.Developer.Period, developer.Address)
|
c.chain = chains.GetDeveloperChain(c.Developer.Period, c.Developer.GasLimit, developer.Address)
|
||||||
|
|
||||||
// update the parameters
|
// update the parameters
|
||||||
n.NetworkId = c.chain.NetworkId
|
n.NetworkId = c.chain.NetworkId
|
||||||
|
|
@ -927,6 +1054,8 @@ func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (*
|
||||||
log.Info("Global gas cap disabled")
|
log.Info("Global gas cap disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.RPCEVMTimeout = c.JsonRPC.RPCEVMTimeout
|
||||||
|
|
||||||
n.RPCTxFeeCap = c.JsonRPC.TxFeeCap
|
n.RPCTxFeeCap = c.JsonRPC.TxFeeCap
|
||||||
|
|
||||||
// sync mode. It can either be "fast", "full" or "snap". We disable
|
// sync mode. It can either be "fast", "full" or "snap". We disable
|
||||||
|
|
@ -1053,6 +1182,35 @@ func ambiguousAddrRecovery(ks *keystore.KeyStore, err *keystore.AmbiguousAddrErr
|
||||||
return *match
|
return *match
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setNodeKey creates a node key from set command line flags, either loading it
|
||||||
|
// from a file or as a specified hex value. If neither flags were provided, this
|
||||||
|
// method returns nil and an emphemeral key is to be generated.
|
||||||
|
func getNodeKey(hex string, file string) *ecdsa.PrivateKey {
|
||||||
|
var (
|
||||||
|
key *ecdsa.PrivateKey
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case file != "" && hex != "":
|
||||||
|
utils.Fatalf("Options %q and %q are mutually exclusive", file, hex)
|
||||||
|
case file != "":
|
||||||
|
if key, err = crypto.LoadECDSA(file); err != nil {
|
||||||
|
utils.Fatalf("Option %q: %v", file, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return key
|
||||||
|
case hex != "":
|
||||||
|
if key, err = crypto.HexToECDSA(hex); err != nil {
|
||||||
|
utils.Fatalf("Option %q: %v", hex, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Config) buildNode() (*node.Config, error) {
|
func (c *Config) buildNode() (*node.Config, error) {
|
||||||
ipcPath := ""
|
ipcPath := ""
|
||||||
if !c.JsonRPC.IPCDisable {
|
if !c.JsonRPC.IPCDisable {
|
||||||
|
|
@ -1091,6 +1249,24 @@ func (c *Config) buildNode() (*node.Config, error) {
|
||||||
WriteTimeout: c.JsonRPC.HttpTimeout.WriteTimeout,
|
WriteTimeout: c.JsonRPC.HttpTimeout.WriteTimeout,
|
||||||
IdleTimeout: c.JsonRPC.HttpTimeout.IdleTimeout,
|
IdleTimeout: c.JsonRPC.HttpTimeout.IdleTimeout,
|
||||||
},
|
},
|
||||||
|
JWTSecret: c.JsonRPC.Auth.JWTSecret,
|
||||||
|
AuthPort: int(c.JsonRPC.Auth.Port),
|
||||||
|
AuthAddr: c.JsonRPC.Auth.Addr,
|
||||||
|
AuthVirtualHosts: c.JsonRPC.Auth.VHosts,
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.P2P.NetRestrict != "" {
|
||||||
|
list, err := netutil.ParseNetlist(c.P2P.NetRestrict)
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("Option %q: %v", c.P2P.NetRestrict, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.P2P.NetRestrict = list
|
||||||
|
}
|
||||||
|
|
||||||
|
key := getNodeKey(c.P2P.NodeKeyHex, c.P2P.NodeKey)
|
||||||
|
if key != nil {
|
||||||
|
cfg.P2P.PrivateKey = key
|
||||||
}
|
}
|
||||||
|
|
||||||
// dev mode
|
// dev mode
|
||||||
|
|
@ -1180,18 +1356,32 @@ func (c *Config) Merge(cc ...*Config) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeDatabaseHandles() (int, error) {
|
func MakeDatabaseHandles(max int) (int, error) {
|
||||||
limit, err := fdlimit.Maximum()
|
limit, err := fdlimit.Maximum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case max == 0:
|
||||||
|
// User didn't specify a meaningful value, use system limits
|
||||||
|
case max < 128:
|
||||||
|
// User specified something unhealthy, just use system defaults
|
||||||
|
log.Error("File descriptor limit invalid (<128)", "had", max, "updated", limit)
|
||||||
|
case max > limit:
|
||||||
|
// User requested more than the OS allows, notify that we can't allocate it
|
||||||
|
log.Warn("Requested file descriptors denied by OS", "req", max, "limit", limit)
|
||||||
|
default:
|
||||||
|
// User limit is meaningful and within allowed range, use that
|
||||||
|
limit = max
|
||||||
|
}
|
||||||
|
|
||||||
raised, err := fdlimit.Raise(uint64(limit))
|
raised, err := fdlimit.Raise(uint64(limit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return int(raised / 2), nil
|
return int(raised / 2), nil // Leave half for networking and other stuff
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseBootnodes(urls []string) ([]*enode.Node, error) {
|
func parseBootnodes(urls []string) ([]*enode.Node, error) {
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,12 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.DataDir,
|
Default: c.cliConfig.DataDir,
|
||||||
HideDefaultFromDoc: true,
|
HideDefaultFromDoc: true,
|
||||||
})
|
})
|
||||||
|
f.BoolFlag(&flagset.BoolFlag{
|
||||||
|
Name: "vmdebug",
|
||||||
|
Usage: "Record information useful for VM and contract debugging",
|
||||||
|
Value: &c.cliConfig.EnablePreimageRecording,
|
||||||
|
Default: c.cliConfig.EnablePreimageRecording,
|
||||||
|
})
|
||||||
f.StringFlag(&flagset.StringFlag{
|
f.StringFlag(&flagset.StringFlag{
|
||||||
Name: "datadir.ancient",
|
Name: "datadir.ancient",
|
||||||
Usage: "Data directory for ancient chain segments (default = inside chaindata)",
|
Usage: "Data directory for ancient chain segments (default = inside chaindata)",
|
||||||
|
|
@ -54,7 +60,7 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
})
|
})
|
||||||
f.StringFlag(&flagset.StringFlag{
|
f.StringFlag(&flagset.StringFlag{
|
||||||
Name: "config",
|
Name: "config",
|
||||||
Usage: "File for the config file",
|
Usage: "Path to the TOML configuration file",
|
||||||
Value: &c.configFile,
|
Value: &c.configFile,
|
||||||
})
|
})
|
||||||
f.StringFlag(&flagset.StringFlag{
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
|
@ -88,6 +94,36 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.BorLogs,
|
Default: c.cliConfig.BorLogs,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// logging related flags (log-level and verbosity is present above, it will be removed soon)
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "vmodule",
|
||||||
|
Usage: "Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)",
|
||||||
|
Value: &c.cliConfig.Logging.Vmodule,
|
||||||
|
Default: c.cliConfig.Logging.Vmodule,
|
||||||
|
Group: "Logging",
|
||||||
|
})
|
||||||
|
f.BoolFlag(&flagset.BoolFlag{
|
||||||
|
Name: "log.json",
|
||||||
|
Usage: "Format logs with JSON",
|
||||||
|
Value: &c.cliConfig.Logging.Json,
|
||||||
|
Default: c.cliConfig.Logging.Json,
|
||||||
|
Group: "Logging",
|
||||||
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "log.backtrace",
|
||||||
|
Usage: "Request a stack trace at a specific logging statement (e.g. 'block.go:271')",
|
||||||
|
Value: &c.cliConfig.Logging.Backtrace,
|
||||||
|
Default: c.cliConfig.Logging.Backtrace,
|
||||||
|
Group: "Logging",
|
||||||
|
})
|
||||||
|
f.BoolFlag(&flagset.BoolFlag{
|
||||||
|
Name: "log.debug",
|
||||||
|
Usage: "Prepends log messages with call-site location (file and line number)",
|
||||||
|
Value: &c.cliConfig.Logging.Debug,
|
||||||
|
Default: c.cliConfig.Logging.Debug,
|
||||||
|
Group: "Logging",
|
||||||
|
})
|
||||||
|
|
||||||
// heimdall
|
// heimdall
|
||||||
f.StringFlag(&flagset.StringFlag{
|
f.StringFlag(&flagset.StringFlag{
|
||||||
Name: "bor.heimdall",
|
Name: "bor.heimdall",
|
||||||
|
|
@ -276,6 +312,18 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Value: &c.cliConfig.Gpo.Percentile,
|
Value: &c.cliConfig.Gpo.Percentile,
|
||||||
Default: c.cliConfig.Gpo.Percentile,
|
Default: c.cliConfig.Gpo.Percentile,
|
||||||
})
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "gpo.maxheaderhistory",
|
||||||
|
Usage: "Maximum header history of gasprice oracle",
|
||||||
|
Value: &c.cliConfig.Gpo.MaxHeaderHistory,
|
||||||
|
Default: c.cliConfig.Gpo.MaxHeaderHistory,
|
||||||
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "gpo.maxblockhistory",
|
||||||
|
Usage: "Maximum block history of gasprice oracle",
|
||||||
|
Value: &c.cliConfig.Gpo.MaxBlockHistory,
|
||||||
|
Default: c.cliConfig.Gpo.MaxBlockHistory,
|
||||||
|
})
|
||||||
f.BigIntFlag(&flagset.BigIntFlag{
|
f.BigIntFlag(&flagset.BigIntFlag{
|
||||||
Name: "gpo.maxprice",
|
Name: "gpo.maxprice",
|
||||||
Usage: "Maximum gas price will be recommended by gpo",
|
Usage: "Maximum gas price will be recommended by gpo",
|
||||||
|
|
@ -367,6 +415,13 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.Cache.TxLookupLimit,
|
Default: c.cliConfig.Cache.TxLookupLimit,
|
||||||
Group: "Cache",
|
Group: "Cache",
|
||||||
})
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "fdlimit",
|
||||||
|
Usage: "Raise the open file descriptor resource limit (default = system fd limit)",
|
||||||
|
Value: &c.cliConfig.Cache.FDLimit,
|
||||||
|
Default: c.cliConfig.Cache.FDLimit,
|
||||||
|
Group: "Cache",
|
||||||
|
})
|
||||||
|
|
||||||
// rpc options
|
// rpc options
|
||||||
f.Uint64Flag(&flagset.Uint64Flag{
|
f.Uint64Flag(&flagset.Uint64Flag{
|
||||||
|
|
@ -376,6 +431,13 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.JsonRPC.GasCap,
|
Default: c.cliConfig.JsonRPC.GasCap,
|
||||||
Group: "JsonRPC",
|
Group: "JsonRPC",
|
||||||
})
|
})
|
||||||
|
f.DurationFlag(&flagset.DurationFlag{
|
||||||
|
Name: "rpc.evmtimeout",
|
||||||
|
Usage: "Sets a timeout used for eth_call (0=infinite)",
|
||||||
|
Value: &c.cliConfig.JsonRPC.RPCEVMTimeout,
|
||||||
|
Default: c.cliConfig.JsonRPC.RPCEVMTimeout,
|
||||||
|
Group: "JsonRPC",
|
||||||
|
})
|
||||||
f.Float64Flag(&flagset.Float64Flag{
|
f.Float64Flag(&flagset.Float64Flag{
|
||||||
Name: "rpc.txfeecap",
|
Name: "rpc.txfeecap",
|
||||||
Usage: "Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)",
|
Usage: "Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)",
|
||||||
|
|
@ -404,6 +466,34 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.JsonRPC.IPCPath,
|
Default: c.cliConfig.JsonRPC.IPCPath,
|
||||||
Group: "JsonRPC",
|
Group: "JsonRPC",
|
||||||
})
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "authrpc.jwtsecret",
|
||||||
|
Usage: "Path to a JWT secret to use for authenticated RPC endpoints",
|
||||||
|
Value: &c.cliConfig.JsonRPC.Auth.JWTSecret,
|
||||||
|
Default: c.cliConfig.JsonRPC.Auth.JWTSecret,
|
||||||
|
Group: "JsonRPC",
|
||||||
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "authrpc.addr",
|
||||||
|
Usage: "Listening address for authenticated APIs",
|
||||||
|
Value: &c.cliConfig.JsonRPC.Auth.Addr,
|
||||||
|
Default: c.cliConfig.JsonRPC.Auth.Addr,
|
||||||
|
Group: "JsonRPC",
|
||||||
|
})
|
||||||
|
f.Uint64Flag(&flagset.Uint64Flag{
|
||||||
|
Name: "authrpc.port",
|
||||||
|
Usage: "Listening port for authenticated APIs",
|
||||||
|
Value: &c.cliConfig.JsonRPC.Auth.Port,
|
||||||
|
Default: c.cliConfig.JsonRPC.Auth.Port,
|
||||||
|
Group: "JsonRPC",
|
||||||
|
})
|
||||||
|
f.SliceStringFlag(&flagset.SliceStringFlag{
|
||||||
|
Name: "authrpc.vhosts",
|
||||||
|
Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.",
|
||||||
|
Value: &c.cliConfig.JsonRPC.Auth.VHosts,
|
||||||
|
Default: c.cliConfig.JsonRPC.Auth.VHosts,
|
||||||
|
Group: "JsonRPC",
|
||||||
|
})
|
||||||
f.SliceStringFlag(&flagset.SliceStringFlag{
|
f.SliceStringFlag(&flagset.SliceStringFlag{
|
||||||
Name: "http.corsdomain",
|
Name: "http.corsdomain",
|
||||||
Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)",
|
Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)",
|
||||||
|
|
@ -566,6 +656,27 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Default: c.cliConfig.P2P.NAT,
|
Default: c.cliConfig.P2P.NAT,
|
||||||
Group: "P2P",
|
Group: "P2P",
|
||||||
})
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "netrestrict",
|
||||||
|
Usage: "Restricts network communication to the given IP networks (CIDR masks)",
|
||||||
|
Value: &c.cliConfig.P2P.NetRestrict,
|
||||||
|
Default: c.cliConfig.P2P.NetRestrict,
|
||||||
|
Group: "P2P",
|
||||||
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "nodekey",
|
||||||
|
Usage: " P2P node key file",
|
||||||
|
Value: &c.cliConfig.P2P.NodeKey,
|
||||||
|
Default: c.cliConfig.P2P.NodeKey,
|
||||||
|
Group: "P2P",
|
||||||
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "nodekeyhex",
|
||||||
|
Usage: "P2P node key as hex",
|
||||||
|
Value: &c.cliConfig.P2P.NodeKeyHex,
|
||||||
|
Default: c.cliConfig.P2P.NodeKeyHex,
|
||||||
|
Group: "P2P",
|
||||||
|
})
|
||||||
f.BoolFlag(&flagset.BoolFlag{
|
f.BoolFlag(&flagset.BoolFlag{
|
||||||
Name: "nodiscover",
|
Name: "nodiscover",
|
||||||
Usage: "Disables the peer discovery mechanism (manual peer addition)",
|
Usage: "Disables the peer discovery mechanism (manual peer addition)",
|
||||||
|
|
@ -739,5 +850,50 @@ func (c *Command) Flags() *flagset.Flagset {
|
||||||
Value: &c.cliConfig.Developer.Period,
|
Value: &c.cliConfig.Developer.Period,
|
||||||
Default: c.cliConfig.Developer.Period,
|
Default: c.cliConfig.Developer.Period,
|
||||||
})
|
})
|
||||||
|
f.Uint64Flag(&flagset.Uint64Flag{
|
||||||
|
Name: "dev.gaslimit",
|
||||||
|
Usage: "Initial block gas limit",
|
||||||
|
Value: &c.cliConfig.Developer.GasLimit,
|
||||||
|
Default: c.cliConfig.Developer.GasLimit,
|
||||||
|
})
|
||||||
|
|
||||||
|
// pprof
|
||||||
|
f.BoolFlag(&flagset.BoolFlag{
|
||||||
|
Name: "pprof",
|
||||||
|
Usage: "Enable the pprof HTTP server",
|
||||||
|
Value: &c.cliConfig.Pprof.Enabled,
|
||||||
|
Default: c.cliConfig.Pprof.Enabled,
|
||||||
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "pprof.port",
|
||||||
|
Usage: "pprof HTTP server listening port",
|
||||||
|
Value: &c.cliConfig.Pprof.Port,
|
||||||
|
Default: c.cliConfig.Pprof.Port,
|
||||||
|
})
|
||||||
|
f.StringFlag(&flagset.StringFlag{
|
||||||
|
Name: "pprof.addr",
|
||||||
|
Usage: "pprof HTTP server listening interface",
|
||||||
|
Value: &c.cliConfig.Pprof.Addr,
|
||||||
|
Default: c.cliConfig.Pprof.Addr,
|
||||||
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "pprof.memprofilerate",
|
||||||
|
Usage: "Turn on memory profiling with the given rate",
|
||||||
|
Value: &c.cliConfig.Pprof.MemProfileRate,
|
||||||
|
Default: c.cliConfig.Pprof.MemProfileRate,
|
||||||
|
})
|
||||||
|
f.IntFlag(&flagset.IntFlag{
|
||||||
|
Name: "pprof.blockprofilerate",
|
||||||
|
Usage: "Turn on block profiling with the given rate",
|
||||||
|
Value: &c.cliConfig.Pprof.BlockProfileRate,
|
||||||
|
Default: c.cliConfig.Pprof.BlockProfileRate,
|
||||||
|
})
|
||||||
|
// f.StringFlag(&flagset.StringFlag{
|
||||||
|
// Name: "pprof.cpuprofile",
|
||||||
|
// Usage: "Write CPU profile to the given file",
|
||||||
|
// Value: &c.cliConfig.Pprof.CPUProfile,
|
||||||
|
// Default: c.cliConfig.Pprof.CPUProfile,
|
||||||
|
// })
|
||||||
|
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,13 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"runtime"
|
"runtime"
|
||||||
"runtime/pprof"
|
"runtime/pprof"
|
||||||
"runtime/trace"
|
"runtime/trace"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Profile generates a pprof.Profile report for the given profile name.
|
// Profile generates a pprof.Profile report for the given profile name.
|
||||||
|
|
@ -113,3 +116,22 @@ func sleep(ctx context.Context, d time.Duration) {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetMemProfileRate(rate int) {
|
||||||
|
runtime.MemProfileRate = rate
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetSetBlockProfileRate(rate int) {
|
||||||
|
runtime.SetBlockProfileRate(rate)
|
||||||
|
}
|
||||||
|
|
||||||
|
func StartPProf(address string) {
|
||||||
|
log.Info("Starting pprof server", "addr", fmt.Sprintf("http://%s/debug/pprof", address))
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
// nolint: gosec
|
||||||
|
if err := http.ListenAndServe(address, nil); err != nil {
|
||||||
|
log.Error("Failure in running pprof server", "err", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/eth/tracers"
|
"github.com/ethereum/go-ethereum/eth/tracers"
|
||||||
"github.com/ethereum/go-ethereum/ethstats"
|
"github.com/ethereum/go-ethereum/ethstats"
|
||||||
"github.com/ethereum/go-ethereum/graphql"
|
"github.com/ethereum/go-ethereum/graphql"
|
||||||
|
"github.com/ethereum/go-ethereum/internal/cli/server/pprof"
|
||||||
"github.com/ethereum/go-ethereum/internal/cli/server/proto"
|
"github.com/ethereum/go-ethereum/internal/cli/server/proto"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/metrics"
|
"github.com/ethereum/go-ethereum/metrics"
|
||||||
|
|
@ -57,6 +58,14 @@ type Server struct {
|
||||||
|
|
||||||
type serverOption func(srv *Server, config *Config) error
|
type serverOption func(srv *Server, config *Config) error
|
||||||
|
|
||||||
|
var glogger *log.GlogHandler
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
glogger = log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false)))
|
||||||
|
glogger.Verbosity(log.LvlInfo)
|
||||||
|
log.Root().SetHandler(glogger)
|
||||||
|
}
|
||||||
|
|
||||||
func WithGRPCAddress() serverOption {
|
func WithGRPCAddress() serverOption {
|
||||||
return func(srv *Server, config *Config) error {
|
return func(srv *Server, config *Config) error {
|
||||||
return srv.gRPCServerByAddress(config.GRPC.Addr)
|
return srv.gRPCServerByAddress(config.GRPC.Addr)
|
||||||
|
|
@ -97,6 +106,13 @@ func VerbosityStringToInt(loglevel string) int {
|
||||||
|
|
||||||
//nolint:gocognit
|
//nolint:gocognit
|
||||||
func NewServer(config *Config, opts ...serverOption) (*Server, error) {
|
func NewServer(config *Config, opts ...serverOption) (*Server, error) {
|
||||||
|
// start pprof
|
||||||
|
if config.Pprof.Enabled {
|
||||||
|
pprof.SetMemProfileRate(config.Pprof.MemProfileRate)
|
||||||
|
pprof.SetSetBlockProfileRate(config.Pprof.BlockProfileRate)
|
||||||
|
pprof.StartPProf(fmt.Sprintf("%s:%d", config.Pprof.Addr, config.Pprof.Port))
|
||||||
|
}
|
||||||
|
|
||||||
runtime.SetMutexProfileFraction(5)
|
runtime.SetMutexProfileFraction(5)
|
||||||
|
|
||||||
srv := &Server{
|
srv := &Server{
|
||||||
|
|
@ -104,7 +120,7 @@ func NewServer(config *Config, opts ...serverOption) (*Server, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the logger
|
// start the logger
|
||||||
setupLogger(VerbosityIntToString(config.Verbosity))
|
setupLogger(VerbosityIntToString(config.Verbosity), *config.Logging)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|
@ -441,16 +457,22 @@ func (s *Server) loggingServerInterceptor(ctx context.Context, req interface{},
|
||||||
return h, err
|
return h, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupLogger(logLevel string) {
|
func setupLogger(logLevel string, loggingInfo LoggingConfig) {
|
||||||
|
var ostream log.Handler
|
||||||
|
|
||||||
output := io.Writer(os.Stderr)
|
output := io.Writer(os.Stderr)
|
||||||
|
|
||||||
usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
|
if loggingInfo.Json {
|
||||||
if usecolor {
|
ostream = log.StreamHandler(output, log.JSONFormat())
|
||||||
output = colorable.NewColorableStderr()
|
} else {
|
||||||
|
usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
|
||||||
|
if usecolor {
|
||||||
|
output = colorable.NewColorableStderr()
|
||||||
|
}
|
||||||
|
ostream = log.StreamHandler(output, log.TerminalFormat(usecolor))
|
||||||
}
|
}
|
||||||
|
|
||||||
ostream := log.StreamHandler(output, log.TerminalFormat(usecolor))
|
glogger.SetHandler(ostream)
|
||||||
glogger := log.NewGlogHandler(ostream)
|
|
||||||
|
|
||||||
// logging
|
// logging
|
||||||
lvl, err := log.LvlFromString(strings.ToLower(logLevel))
|
lvl, err := log.LvlFromString(strings.ToLower(logLevel))
|
||||||
|
|
@ -460,6 +482,20 @@ func setupLogger(logLevel string) {
|
||||||
glogger.Verbosity(log.LvlInfo)
|
glogger.Verbosity(log.LvlInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if loggingInfo.Vmodule != "" {
|
||||||
|
if err := glogger.Vmodule(loggingInfo.Vmodule); err != nil {
|
||||||
|
log.Error("failed to set Vmodule", "err", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.PrintOrigins(loggingInfo.Debug)
|
||||||
|
|
||||||
|
if loggingInfo.Backtrace != "" {
|
||||||
|
if err := glogger.BacktraceAt(loggingInfo.Backtrace); err != nil {
|
||||||
|
log.Error("failed to set BacktraceAt", "err", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.Root().SetHandler(glogger)
|
log.Root().SetHandler(glogger)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ func (c *PruneStateCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
dbHandles, err := server.MakeDatabaseHandles()
|
dbHandles, err := server.MakeDatabaseHandles(0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.UI.Error(err.Error())
|
c.UI.Error(err.Error())
|
||||||
return 1
|
return 1
|
||||||
|
|
|
||||||
|
|
@ -57,15 +57,19 @@ func TestClientSyncTree(t *testing.T) {
|
||||||
|
|
||||||
c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)})
|
c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)})
|
||||||
stree, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n")
|
stree, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("sync error:", err)
|
t.Fatal("sync error:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !reflect.DeepEqual(sortByID(stree.Nodes()), sortByID(wantNodes)) {
|
if !reflect.DeepEqual(sortByID(stree.Nodes()), sortByID(wantNodes)) {
|
||||||
t.Errorf("wrong nodes in synced tree:\nhave %v\nwant %v", spew.Sdump(stree.Nodes()), spew.Sdump(wantNodes))
|
t.Errorf("wrong nodes in synced tree:\nhave %v\nwant %v", spew.Sdump(stree.Nodes()), spew.Sdump(wantNodes))
|
||||||
}
|
}
|
||||||
|
|
||||||
if !reflect.DeepEqual(stree.Links(), wantLinks) {
|
if !reflect.DeepEqual(stree.Links(), wantLinks) {
|
||||||
t.Errorf("wrong links in synced tree: %v", stree.Links())
|
t.Errorf("wrong links in synced tree: %v", stree.Links())
|
||||||
}
|
}
|
||||||
|
|
||||||
if stree.Seq() != wantSeq {
|
if stree.Seq() != wantSeq {
|
||||||
t.Errorf("synced tree has wrong seq: %d", stree.Seq())
|
t.Errorf("synced tree has wrong seq: %d", stree.Seq())
|
||||||
}
|
}
|
||||||
|
|
@ -295,7 +299,7 @@ func TestIteratorEmptyTree(t *testing.T) {
|
||||||
|
|
||||||
// updateSomeNodes applies ENR updates to some of the given nodes.
|
// updateSomeNodes applies ENR updates to some of the given nodes.
|
||||||
func updateSomeNodes(keySeed int64, nodes []*enode.Node) {
|
func updateSomeNodes(keySeed int64, nodes []*enode.Node) {
|
||||||
keys := testKeys(nodesSeed1, len(nodes))
|
keys := testKeys(keySeed, len(nodes))
|
||||||
for i, n := range nodes[:len(nodes)/2] {
|
for i, n := range nodes[:len(nodes)/2] {
|
||||||
r := n.Record()
|
r := n.Record()
|
||||||
r.Set(enr.IP{127, 0, 0, 1})
|
r.Set(enr.IP{127, 0, 0, 1})
|
||||||
|
|
@ -384,10 +388,12 @@ func makeTestTree(domain string, nodes []*enode.Node, links []string) (*Tree, st
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
url, err := tree.Sign(testKey(signingKeySeed), domain)
|
url, err := tree.Sign(testKey(signingKeySeed), domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return tree, url
|
return tree, url
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
chain = "mainnet"
|
chain = "mainnet"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = ""
|
# keystore = ""
|
||||||
|
|
@ -12,6 +13,12 @@ gcmode = "archive"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -19,6 +26,9 @@ gcmode = "archive"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -58,6 +68,7 @@ gcmode = "archive"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -82,6 +93,11 @@ gcmode = "archive"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -90,6 +106,8 @@ gcmode = "archive"
|
||||||
[gpo]
|
[gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
ignoreprice = "30000000000"
|
ignoreprice = "30000000000"
|
||||||
|
|
||||||
|
|
@ -122,6 +140,7 @@ gcmode = "archive"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
# [accounts]
|
# [accounts]
|
||||||
# unlock = []
|
# unlock = []
|
||||||
|
|
@ -136,3 +155,11 @@ gcmode = "archive"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
chain = "mainnet"
|
chain = "mainnet"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = ""
|
# keystore = ""
|
||||||
|
|
@ -12,6 +13,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -19,6 +26,9 @@ syncmode = "full"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -58,6 +68,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -82,6 +93,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -90,6 +106,8 @@ syncmode = "full"
|
||||||
[gpo]
|
[gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
ignoreprice = "30000000000"
|
ignoreprice = "30000000000"
|
||||||
|
|
||||||
|
|
@ -122,6 +140,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
# [accounts]
|
# [accounts]
|
||||||
# unlock = []
|
# unlock = []
|
||||||
|
|
@ -136,3 +155,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
chain = "mainnet"
|
chain = "mainnet"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = "$BOR_DIR/keystore"
|
# keystore = "$BOR_DIR/keystore"
|
||||||
|
|
@ -14,6 +15,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 1
|
maxpeers = 1
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -21,6 +28,9 @@ syncmode = "full"
|
||||||
# maxpendpeers = 50
|
# maxpendpeers = 50
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -60,6 +70,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -84,6 +95,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -92,6 +108,8 @@ syncmode = "full"
|
||||||
[gpo]
|
[gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
ignoreprice = "30000000000"
|
ignoreprice = "30000000000"
|
||||||
|
|
||||||
|
|
@ -124,6 +142,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
allow-insecure-unlock = true
|
allow-insecure-unlock = true
|
||||||
|
|
@ -138,3 +157,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
chain = "mainnet"
|
chain = "mainnet"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = "$BOR_DIR/keystore"
|
# keystore = "$BOR_DIR/keystore"
|
||||||
|
|
@ -14,6 +15,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -21,6 +28,9 @@ syncmode = "full"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -60,6 +70,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -84,6 +95,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -92,6 +108,8 @@ syncmode = "full"
|
||||||
[gpo]
|
[gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
ignoreprice = "30000000000"
|
ignoreprice = "30000000000"
|
||||||
|
|
||||||
|
|
@ -124,6 +142,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
allow-insecure-unlock = true
|
allow-insecure-unlock = true
|
||||||
|
|
@ -138,3 +157,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
chain = "mumbai"
|
chain = "mumbai"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = ""
|
# keystore = ""
|
||||||
|
|
@ -12,6 +13,12 @@ gcmode = "archive"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -19,6 +26,9 @@ gcmode = "archive"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -58,6 +68,7 @@ gcmode = "archive"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -82,6 +93,11 @@ gcmode = "archive"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -90,6 +106,8 @@ gcmode = "archive"
|
||||||
# [gpo]
|
# [gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
# ignoreprice = "2"
|
# ignoreprice = "2"
|
||||||
|
|
||||||
|
|
@ -122,6 +140,7 @@ gcmode = "archive"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
# [accounts]
|
# [accounts]
|
||||||
# unlock = []
|
# unlock = []
|
||||||
|
|
@ -136,3 +155,11 @@ gcmode = "archive"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
chain = "mumbai"
|
chain = "mumbai"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = ""
|
# keystore = ""
|
||||||
|
|
@ -12,6 +13,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -19,6 +26,9 @@ syncmode = "full"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -58,6 +68,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -82,6 +93,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -90,6 +106,8 @@ syncmode = "full"
|
||||||
# [gpo]
|
# [gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
# ignoreprice = "2"
|
# ignoreprice = "2"
|
||||||
|
|
||||||
|
|
@ -122,6 +140,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
# [accounts]
|
# [accounts]
|
||||||
# unlock = []
|
# unlock = []
|
||||||
|
|
@ -136,3 +155,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
chain = "mumbai"
|
chain = "mumbai"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = "$BOR_DIR/keystore"
|
# keystore = "$BOR_DIR/keystore"
|
||||||
|
|
@ -14,6 +15,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 1
|
maxpeers = 1
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -21,6 +28,9 @@ syncmode = "full"
|
||||||
# maxpendpeers = 50
|
# maxpendpeers = 50
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -60,6 +70,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -84,6 +95,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -92,6 +108,8 @@ syncmode = "full"
|
||||||
# [gpo]
|
# [gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
# ignoreprice = "2"
|
# ignoreprice = "2"
|
||||||
|
|
||||||
|
|
@ -124,6 +142,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
allow-insecure-unlock = true
|
allow-insecure-unlock = true
|
||||||
|
|
@ -138,3 +157,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
chain = "mumbai"
|
chain = "mumbai"
|
||||||
# identity = "node_name"
|
# identity = "node_name"
|
||||||
# verbosity = 3
|
# verbosity = 3
|
||||||
|
# vmdebug = false
|
||||||
datadir = "/var/lib/bor/data"
|
datadir = "/var/lib/bor/data"
|
||||||
# ancient = ""
|
# ancient = ""
|
||||||
# keystore = "$BOR_DIR/keystore"
|
# keystore = "$BOR_DIR/keystore"
|
||||||
|
|
@ -14,6 +15,12 @@ syncmode = "full"
|
||||||
|
|
||||||
# ["eth.requiredblocks"]
|
# ["eth.requiredblocks"]
|
||||||
|
|
||||||
|
# [log]
|
||||||
|
# vmodule = ""
|
||||||
|
# json = false
|
||||||
|
# backtrace = ""
|
||||||
|
# debug = true
|
||||||
|
|
||||||
[p2p]
|
[p2p]
|
||||||
maxpeers = 50
|
maxpeers = 50
|
||||||
port = 30303
|
port = 30303
|
||||||
|
|
@ -21,6 +28,9 @@ syncmode = "full"
|
||||||
# bind = "0.0.0.0"
|
# bind = "0.0.0.0"
|
||||||
# nodiscover = false
|
# nodiscover = false
|
||||||
# nat = "any"
|
# nat = "any"
|
||||||
|
# netrestrict = ""
|
||||||
|
# nodekey = ""
|
||||||
|
# nodekeyhex = ""
|
||||||
# [p2p.discovery]
|
# [p2p.discovery]
|
||||||
# v5disc = false
|
# v5disc = false
|
||||||
# bootnodes = []
|
# bootnodes = []
|
||||||
|
|
@ -60,6 +70,7 @@ syncmode = "full"
|
||||||
ipcpath = "/var/lib/bor/bor.ipc"
|
ipcpath = "/var/lib/bor/bor.ipc"
|
||||||
# ipcdisable = false
|
# ipcdisable = false
|
||||||
# gascap = 50000000
|
# gascap = 50000000
|
||||||
|
# evmtimeout = "5s"
|
||||||
# txfeecap = 5.0
|
# txfeecap = 5.0
|
||||||
# allow-unprotected-txs = false
|
# allow-unprotected-txs = false
|
||||||
[jsonrpc.http]
|
[jsonrpc.http]
|
||||||
|
|
@ -84,6 +95,11 @@ syncmode = "full"
|
||||||
# host = ""
|
# host = ""
|
||||||
# vhosts = ["*"]
|
# vhosts = ["*"]
|
||||||
# corsdomain = ["*"]
|
# corsdomain = ["*"]
|
||||||
|
# [jsonrpc.auth]
|
||||||
|
# jwtsecret = ""
|
||||||
|
# addr = "localhost"
|
||||||
|
# port = 8551
|
||||||
|
# vhosts = ["localhost"]
|
||||||
# [jsonrpc.timeouts]
|
# [jsonrpc.timeouts]
|
||||||
# read = "30s"
|
# read = "30s"
|
||||||
# write = "30s"
|
# write = "30s"
|
||||||
|
|
@ -92,6 +108,8 @@ syncmode = "full"
|
||||||
# [gpo]
|
# [gpo]
|
||||||
# blocks = 20
|
# blocks = 20
|
||||||
# percentile = 60
|
# percentile = 60
|
||||||
|
# maxheaderhistory = 1024
|
||||||
|
# maxblockhistory = 1024
|
||||||
# maxprice = "5000000000000"
|
# maxprice = "5000000000000"
|
||||||
# ignoreprice = "2"
|
# ignoreprice = "2"
|
||||||
|
|
||||||
|
|
@ -124,6 +142,7 @@ syncmode = "full"
|
||||||
# preimages = false
|
# preimages = false
|
||||||
# txlookuplimit = 2350000
|
# txlookuplimit = 2350000
|
||||||
# timeout = "1h0m0s"
|
# timeout = "1h0m0s"
|
||||||
|
# fdlimit = 0
|
||||||
|
|
||||||
[accounts]
|
[accounts]
|
||||||
allow-insecure-unlock = true
|
allow-insecure-unlock = true
|
||||||
|
|
@ -138,3 +157,11 @@ syncmode = "full"
|
||||||
# [developer]
|
# [developer]
|
||||||
# dev = false
|
# dev = false
|
||||||
# period = 0
|
# period = 0
|
||||||
|
# gaslimit = 11500000
|
||||||
|
|
||||||
|
# [pprof]
|
||||||
|
# pprof = false
|
||||||
|
# port = 6060
|
||||||
|
# addr = "127.0.0.1"
|
||||||
|
# memprofilerate = 524288
|
||||||
|
# blockprofilerate = 0
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ func DialInProc(handler *Server) *Client {
|
||||||
initctx := context.Background()
|
initctx := context.Background()
|
||||||
c, _ := newClient(initctx, func(context.Context) (ServerCodec, error) {
|
c, _ := newClient(initctx, func(context.Context) (ServerCodec, error) {
|
||||||
p1, p2 := net.Pipe()
|
p1, p2 := net.Pipe()
|
||||||
|
|
||||||
// nolint: contextcheck
|
// nolint: contextcheck
|
||||||
go handler.ServeCodec(NewCodec(p1), 0)
|
go handler.ServeCodec(NewCodec(p1), 0)
|
||||||
return NewCodec(p2), nil
|
return NewCodec(p2), nil
|
||||||
|
|
|
||||||
|
|
@ -105,11 +105,13 @@ func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) {
|
||||||
reqs, batch, err := codec.readBatch()
|
reqs, batch, err := codec.readBatch()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err != io.EOF {
|
if err != io.EOF {
|
||||||
// nolint:errcheck
|
// nolint: errcheck
|
||||||
codec.writeJSON(ctx, errorMessage(&invalidMessageError{"parse error"}))
|
codec.writeJSON(ctx, errorMessage(&invalidMessageError{"parse error"}))
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nolint: contextcheck
|
||||||
if batch {
|
if batch {
|
||||||
// nolint: contextcheck
|
// nolint: contextcheck
|
||||||
h.handleBatch(reqs)
|
h.handleBatch(reqs)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue