Setup agent/proto version identifiers in libp2p. (#2079)

* Supply `nim-libp2p` with `agent-string` and `proto-string` as configured parameters.

* Remove protoString and rng check.

* Fix compilation problem.
This commit is contained in:
Eugene Kabanov 2020-11-28 09:00:36 +02:00 committed by GitHub
parent e7f2735271
commit db030eb944
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 10 deletions

View File

@ -103,6 +103,11 @@ type
"file (default: false)" "file (default: false)"
name: "insecure-netkey-password" }: bool name: "insecure-netkey-password" }: bool
agentString* {.
defaultValue: "nimbus",
desc: "Node agent string which is used as identifier in network"
name: "agent-string" }: string
case cmd* {. case cmd* {.
command command
defaultValue: noCommand }: BNStartUpCmd defaultValue: noCommand }: BNStartUpCmd

View File

@ -11,10 +11,12 @@ import
json_serialization, json_serialization/std/[net, options], json_serialization, json_serialization/std/[net, options],
chronos, chronicles, metrics, chronos, chronicles, metrics,
# TODO: create simpler to use libp2p modules that use re-exports # TODO: create simpler to use libp2p modules that use re-exports
libp2p/[switch, standard_setup, peerinfo, libp2p/[switch, peerinfo,
multiaddress, multicodec, crypto/crypto, crypto/secp, multiaddress, multicodec, crypto/crypto, crypto/secp,
protocols/identify, protocols/protocol], protocols/identify, protocols/protocol],
libp2p/protocols/secure/[secure, secio], libp2p/muxers/muxer, libp2p/muxers/mplex/mplex,
libp2p/transports/[transport, tcptransport],
libp2p/protocols/secure/[secure, noise],
libp2p/protocols/pubsub/[pubsub, rpc/message, rpc/messages], libp2p/protocols/pubsub/[pubsub, rpc/message, rpc/messages],
libp2p/transports/tcptransport, libp2p/transports/tcptransport,
libp2p/stream/connection, libp2p/stream/connection,
@ -1499,6 +1501,25 @@ func msgIdProvider(m: messages.Message): seq[byte] =
except CatchableError: except CatchableError:
gossipId(m.data, false) gossipId(m.data, false)
proc newBeaconSwitch*(conf: BeaconNodeConf, seckey: PrivateKey,
address: MultiAddress,
rng: ref BrHmacDrbgContext): Switch =
proc createMplex(conn: Connection): Muxer =
Mplex.init(conn, inTimeout = 5.minutes, outTimeout = 5.minutes)
let
peerInfo = PeerInfo.init(seckey, [address])
mplexProvider = newMuxerProvider(createMplex, MplexCodec)
transports = @[Transport(TcpTransport.init({ServerFlags.ReuseAddr}))]
muxers = {MplexCodec: mplexProvider}.toTable
secureManagers = [Secure(newNoise(rng, seckey))]
peerInfo.agentVersion = conf.agentString
let identify = newIdentify(peerInfo)
newSwitch(peerInfo, transports, identify, muxers, secureManagers)
proc createEth2Node*(rng: ref BrHmacDrbgContext, proc createEth2Node*(rng: ref BrHmacDrbgContext,
conf: BeaconNodeConf, conf: BeaconNodeConf,
netKeys: KeyPair, netKeys: KeyPair,
@ -1510,18 +1531,13 @@ proc createEth2Node*(rng: ref BrHmacDrbgContext,
else: @[tcpEndPoint(extIp.get(), extTcpPort)] else: @[tcpEndPoint(extIp.get(), extTcpPort)]
debug "Initializing networking", hostAddress, debug "Initializing networking", hostAddress,
network_public_key = netKeys.pubkey, network_public_key = netKeys.pubkey,
announcedAddresses announcedAddresses
# TODO nim-libp2p still doesn't have support for announcing addresses # TODO nim-libp2p still doesn't have support for announcing addresses
# that are different from the host address (this is relevant when we # that are different from the host address (this is relevant when we
# are running behind a NAT). # are running behind a NAT).
var switch = newStandardSwitch(some netKeys.seckey, hostAddress, var switch = newBeaconSwitch(conf, netKeys.seckey, hostAddress, rng)
transportFlags = {ServerFlags.ReuseAddr},
secureManagers = [
SecureProtocol.Noise, # Only noise in ETH2!
],
rng = rng)
let let
params = params =