Bump nim-eth to use lrucache for discovery sessions (#1622)

This commit is contained in:
Kim De Mey 2020-09-11 19:46:48 +02:00 committed by GitHub
parent eaea3dbc94
commit 5fff800cf8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 25 deletions

View File

@ -1,9 +1,9 @@
{.push raises: [Defect].}
import
os, strutils,
chronicles, stew/shims/net, stew/results, eth/keys, eth/trie/db, bearssl,
eth/p2p/discoveryv5/[enr, protocol, discovery_db, node],
std/[os, strutils],
chronicles, stew/shims/net, stew/results, bearssl,
eth/keys, eth/p2p/discoveryv5/[enr, protocol, node],
conf
type
@ -37,8 +37,7 @@ proc parseBootstrapAddress*(address: TaintedString):
return err "Ignoring unrecognized bootstrap address type"
proc addBootstrapNode*(bootstrapAddr: string,
bootstrapEnrs: var seq[enr.Record],
localPubKey: PublicKey) =
bootstrapEnrs: var seq[enr.Record]) =
let enrRes = parseBootstrapAddress(bootstrapAddr)
if enrRes.isOk:
bootstrapEnrs.add enrRes.value
@ -47,14 +46,13 @@ proc addBootstrapNode*(bootstrapAddr: string,
bootstrapAddr, reason = enrRes.error
proc loadBootstrapFile*(bootstrapFile: string,
bootstrapEnrs: var seq[enr.Record],
localPubKey: PublicKey) =
bootstrapEnrs: var seq[enr.Record]) =
if bootstrapFile.len == 0: return
let ext = splitFile(bootstrapFile).ext
if cmpIgnoreCase(ext, ".txt") == 0 or cmpIgnoreCase(ext, ".enr") == 0 :
try:
for ln in lines(bootstrapFile):
addBootstrapNode(ln, bootstrapEnrs, localPubKey)
addBootstrapNode(ln, bootstrapEnrs)
except IOError as e:
error "Could not read bootstrap file", msg = e.msg
quit 1
@ -64,7 +62,7 @@ proc loadBootstrapFile*(bootstrapFile: string,
# removal of YAML metadata.
try:
for ln in lines(bootstrapFile):
addBootstrapNode(string(ln.strip()[3..^2]), bootstrapEnrs, localPubKey)
addBootstrapNode(string(ln.strip()[3..^2]), bootstrapEnrs)
except IOError as e:
error "Could not read bootstrap file", msg = e.msg
quit 1
@ -82,19 +80,14 @@ proc new*(T: type Eth2DiscoveryProtocol,
# Implement more configuration options:
# * for setting up a specific key
# * for using a persistent database
let
ourPubKey = pk.toPublicKey()
# TODO: `newMemoryDB()` causes raises: [Exception]
db = DiscoveryDB.init(newMemoryDB())
var bootstrapEnrs: seq[enr.Record]
for node in conf.bootstrapNodes:
addBootstrapNode(node, bootstrapEnrs, ourPubKey)
loadBootstrapFile(string conf.bootstrapNodesFile, bootstrapEnrs, ourPubKey)
addBootstrapNode(node, bootstrapEnrs)
loadBootstrapFile(string conf.bootstrapNodesFile, bootstrapEnrs)
let persistentBootstrapFile = conf.dataDir / "bootstrap_nodes.txt"
if fileExists(persistentBootstrapFile):
loadBootstrapFile(persistentBootstrapFile, bootstrapEnrs, ourPubKey)
loadBootstrapFile(persistentBootstrapFile, bootstrapEnrs)
newProtocol(
pk, db, ip, tcpPort, udpPort, enrFields, bootstrapEnrs, rng = rng)
pk, ip, tcpPort, udpPort, enrFields, bootstrapEnrs, rng = rng)

View File

@ -4,15 +4,15 @@
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
import sequtils, strutils, os, tables, options
import std/[sequtils, strutils, os, tables, options]
import confutils, chronicles, chronos
import libp2p/[switch, standard_setup, multiaddress, multicodec, peerinfo]
import libp2p/crypto/crypto as lcrypto
import libp2p/crypto/secp as lsecp
import libp2p/protocols/pubsub/[pubsub, gossipsub]
import eth/p2p/discoveryv5/enr as enr
import eth/p2p/discoveryv5/[protocol, discovery_db, node]
import eth/keys as ethkeys, eth/trie/db
import eth/p2p/discoveryv5/[protocol, node]
import eth/keys as ethkeys
import stew/[results, objects]
import stew/byteutils as bu
import stew/shims/net
@ -405,16 +405,15 @@ proc bootstrapDiscovery(conf: InspectorConf,
bootnodes: seq[enr.Record],
enrFields: Option[ENRFieldPair]): DiscoveryProtocol =
var pk = ethkeys.PrivateKey(privkey.skkey)
var db = DiscoveryDB.init(newMemoryDB())
let udpPort = Port(conf.discoveryPort)
let tcpPort = Port(conf.ethPort)
let host = host.toIpAddress()
if enrFields.isSome():
let fields = enrFields.get()
let pairs = {"eth2": fields.eth2, "attnets": fields.attnets}
result = newProtocol(pk, db, host, tcpPort, udpPort, pairs, bootnodes)
result = newProtocol(pk, host, tcpPort, udpPort, pairs, bootnodes)
else:
result = newProtocol(pk, db, host, tcpPort, udpPort, [], bootnodes)
result = newProtocol(pk, host, tcpPort, udpPort, [], bootnodes)
result.open()
result.start()

2
vendor/nim-eth vendored

@ -1 +1 @@
Subproject commit 8e8c982270fe8411aa2173bb4f43af229496acce
Subproject commit c9caafb2a4a0e69471bf1335188c54aad27536df