* dev: chg: pos-1605: fix govulns by bumping golang version and replacing mongodb version
* dev: chg: pos-1605: update some dependencies to solve dependabot vulns
* dev: chg: update linter for compatibility with upgraded go version
* dev: chg: update go version in golangci lintere
* dev: chg: update go version in ci workflow, docker and travis
* dev: chg: change govulncheck version to a stable fixed one
* dev: chg: fix govulncheck version
* dev: chg: remove vulncheck version
* dev: chg: adapt tests based on go-ethereum for go version upgrade
* dev: chg: use explicit go version for templum action
* dev: chg: fix lint
* dev: chg: fix lint
* dev: chg: 1.20.x explicitly in packager
* dev: chg: ignore some additional leak to be fixed
* dev: chg: ignore some additional leak to be fixed
* dev: chg: fix lint
* 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 removes auto-configuration of the snap.*.ethdisco.net DNS discovery tree.
Since measurements have shown that > 75% of nodes in all.*.ethdisco.net support
snap, we have decided to retire the dedicated index for snap and just use the eth
tree instead.
The dial iterators of eth and snap now use the same DNS tree in the default configuration,
so both iterators should use the same DNS discovery client instance. This ensures that
the record cache and rate limit are shared. Records will not be requested multiple times.
While testing the change, I noticed that duplicate DNS requests do happen even
when the client instance is shared. This is because the two iterators request the tree
root, link tree root, and first levels of the tree in lockstep. To avoid this problem, the
change also adds a singleflight.Group instance in the client. When one iterator
attempts to resolve an entry which is already being resolved, the singleflight object
waits for the existing resolve call to finish and returns the entry to both places.
This fixes the calculation of the tree branch factor. With the new
formula, we now creat at most 13 children instead of 30, ensuring
the TXT record size will be below 370 bytes.
In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.
The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.
Fixes#22306
This adds additional logic to re-resolve the root name of a tree when a
couple of leaf requests have failed. We need this change to avoid
getting into a failure state where leaf requests keep failing for half
an hour when the tree has been updated.
* p2p/dnsdisc: add support for enode.Iterator
This changes the dnsdisc.Client API to support the enode.Iterator
interface.
* p2p/dnsdisc: rate-limit DNS requests
* p2p/dnsdisc: preserve linked trees across root updates
This improves the way links are handled when the link root changes.
Previously, sync would simply remove all links from the current tree and
garbage-collect all unreachable trees before syncing the new list of
links.
This behavior isn't great in certain cases: Consider a structure where
trees A, B, and C reference each other and D links to A. If D's link
root changed, the sync code would first remove trees A, B and C, only to
re-sync them later when the link to A was found again.
The fix for this problem is to track the current set of links in each
clientTree and removing old links only AFTER all links are synced.
* p2p/dnsdisc: deflake iterator test
* cmd/devp2p: adapt dnsClient to new p2p/dnsdisc API
* p2p/dnsdisc: tiny comment fix
This adds an implementation of node discovery via DNS TXT records to the
go-ethereum library. The implementation doesn't match EIP-1459 exactly,
the main difference being that this implementation uses separate merkle
trees for tree links and ENRs. The EIP will be updated to match p2p/dnsdisc.
To maintain DNS trees, cmd/devp2p provides a frontend for the p2p/dnsdisc
library. The new 'dns' subcommands can be used to create, sign and deploy DNS
discovery trees.