diff options
author | Felföldi Zsolt <zsfelfoldi@gmail.com> | 2018-01-22 20:38:34 +0800 |
---|---|---|
committer | Felix Lange <fjl@users.noreply.github.com> | 2018-01-22 20:38:34 +0800 |
commit | 92580d69d3156e5d2f0788eb5d48664cc3fb0ef3 (patch) | |
tree | fc9a52735b2857802a18bcdd0964d5e861024ddd /les | |
parent | 02aeb3d76652a4c0451e5c3734e6881aefe46249 (diff) | |
download | dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar.gz dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar.bz2 dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar.lz dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar.xz dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.tar.zst dexon-92580d69d3156e5d2f0788eb5d48664cc3fb0ef3.zip |
p2p, p2p/discover, p2p/discv5: implement UDP port sharing (#15200)
This commit affects p2p/discv5 "topic discovery" by running it on
the same UDP port where the old discovery works. This is realized
by giving an "unhandled" packet channel to the old v4 discovery
packet handler where all invalid packets are sent. These packets
are then processed by v5. v5 packets are always invalid when
interpreted by v4 and vice versa. This is ensured by adding one
to the first byte of the packet hash in v5 packets.
DiscoveryV5Bootnodes is also changed to point to new bootnodes
that are implementing the changed packet format with modified
hash. Existing and new v5 bootnodes are both running on different
ports ATM.
Diffstat (limited to 'les')
-rw-r--r-- | les/backend.go | 5 | ||||
-rw-r--r-- | les/protocol.go | 5 | ||||
-rw-r--r-- | les/server.go | 4 |
3 files changed, 7 insertions, 7 deletions
diff --git a/les/backend.go b/les/backend.go index 7180b81d7..798e44e85 100644 --- a/les/backend.go +++ b/les/backend.go @@ -221,9 +221,8 @@ func (s *LightEthereum) Start(srvr *p2p.Server) error { s.startBloomHandlers() log.Warn("Light client mode is an experimental feature") s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.networkId) - // search the topic belonging to the oldest supported protocol because - // servers always advertise all supported protocols - protocolVersion := ClientProtocolVersions[len(ClientProtocolVersions)-1] + // clients are searching for the first advertised protocol in the list + protocolVersion := AdvertiseProtocolVersions[0] s.serverPool.start(srvr, lesTopic(s.blockchain.Genesis().Hash(), protocolVersion)) s.protocolManager.Start() return nil diff --git a/les/protocol.go b/les/protocol.go index 05e6654d6..6a7354d1c 100644 --- a/les/protocol.go +++ b/les/protocol.go @@ -41,8 +41,9 @@ const ( // Supported versions of the les protocol (first is primary) var ( - ClientProtocolVersions = []uint{lpv2, lpv1} - ServerProtocolVersions = []uint{lpv2, lpv1} + ClientProtocolVersions = []uint{lpv2, lpv1} + ServerProtocolVersions = []uint{lpv2, lpv1} + AdvertiseProtocolVersions = []uint{lpv2} // clients are searching for the first advertised protocol in the list ) // Number of implemented message corresponding to different protocol versions. diff --git a/les/server.go b/les/server.go index d8f93cd87..ec2e44fec 100644 --- a/les/server.go +++ b/les/server.go @@ -56,8 +56,8 @@ func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { return nil, err } - lesTopics := make([]discv5.Topic, len(ServerProtocolVersions)) - for i, pv := range ServerProtocolVersions { + lesTopics := make([]discv5.Topic, len(AdvertiseProtocolVersions)) + for i, pv := range AdvertiseProtocolVersions { lesTopics[i] = lesTopic(eth.BlockChain().Genesis().Hash(), pv) } |