mirror of https://github.com/status-im/nim-eth.git
Small improvements and cleanup
This commit is contained in:
parent
e43ee6ef9c
commit
d33d27c2ee
|
@ -30,7 +30,7 @@ const IpVoteTimeout = 5.minutes ## Duration until a vote expires
|
||||||
|
|
||||||
type
|
type
|
||||||
IpVote* = object
|
IpVote* = object
|
||||||
votes: Table[NodeId, (Address, chronos.Moment)]
|
votes: Table[NodeId, tuple[address: Address, expiry: chronos.Moment]]
|
||||||
threshold: uint ## Minimum threshold to allow for a majority to count
|
threshold: uint ## Minimum threshold to allow for a majority to count
|
||||||
|
|
||||||
func init*(T: type IpVote, threshold: uint = 10): T =
|
func init*(T: type IpVote, threshold: uint = 10): T =
|
||||||
|
@ -59,10 +59,10 @@ proc majority*(ipvote: var IpVote): Option[Address] =
|
||||||
pruneList: seq[NodeId]
|
pruneList: seq[NodeId]
|
||||||
ipCount: CountTable[Address]
|
ipCount: CountTable[Address]
|
||||||
for k, v in ipvote.votes:
|
for k, v in ipvote.votes:
|
||||||
if now > v[1]:
|
if now > v.expiry:
|
||||||
pruneList.add(k)
|
pruneList.add(k)
|
||||||
else:
|
else:
|
||||||
ipCount.inc(v[0])
|
ipCount.inc(v.address)
|
||||||
|
|
||||||
for id in pruneList:
|
for id in pruneList:
|
||||||
ipvote.votes.del(id)
|
ipvote.votes.del(id)
|
||||||
|
|
|
@ -73,6 +73,9 @@ proc random*(T: type NodeId, rng: var BrHmacDrbgContext): T =
|
||||||
|
|
||||||
id
|
id
|
||||||
|
|
||||||
|
func toBytes*(id: NodeId): array[32, byte] =
|
||||||
|
id.toByteArrayBE()
|
||||||
|
|
||||||
func `$`*(id: NodeId): string =
|
func `$`*(id: NodeId): string =
|
||||||
id.toHex()
|
id.toHex()
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
import
|
import
|
||||||
std/[tables, sets, options, math, sequtils, algorithm],
|
std/[tables, sets, options, math, sequtils, algorithm],
|
||||||
stew/shims/net as stewNet, json_serialization/std/net,
|
stew/shims/net as stewNet, json_serialization/std/net,
|
||||||
stew/endians2, chronicles, chronos, stint, bearssl, metrics,
|
stew/[endians2, arrayops], chronicles, chronos, stint, bearssl, metrics,
|
||||||
eth/[rlp, keys, async_utils],
|
eth/[rlp, keys, async_utils],
|
||||||
types, encoding, node, routing_table, enr, random2, sessions, ip_vote
|
types, encoding, node, routing_table, enr, random2, sessions, ip_vote
|
||||||
|
|
||||||
|
@ -866,12 +866,12 @@ proc revalidateNode*(d: Protocol, n: Node)
|
||||||
# Get IP and port from pong message and add it to the ip votes
|
# Get IP and port from pong message and add it to the ip votes
|
||||||
if res.ip.len == 4:
|
if res.ip.len == 4:
|
||||||
var ip: array[4, byte]
|
var ip: array[4, byte]
|
||||||
copyMem(addr ip, unsafeAddr res.ip[0], sizeof(ip))
|
discard copyFrom(ip, res.ip)
|
||||||
let a = Address(ip: ipv4(ip), port: Port(res.port))
|
let a = Address(ip: ipv4(ip), port: Port(res.port))
|
||||||
d.ipVote.insert(n.id, a);
|
d.ipVote.insert(n.id, a);
|
||||||
elif res.ip.len == 16:
|
elif res.ip.len == 16:
|
||||||
var ip: array[16, byte]
|
var ip: array[16, byte]
|
||||||
copyMem(addr ip, unsafeAddr res.ip[0], sizeof(ip))
|
discard copyFrom(ip, res.ip)
|
||||||
let a = Address(ip: ipv6(ip), port: Port(res.port))
|
let a = Address(ip: ipv6(ip), port: Port(res.port))
|
||||||
d.ipVote.insert(n.id, a);
|
d.ipVote.insert(n.id, a);
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import
|
import
|
||||||
std/hashes,
|
std/hashes,
|
||||||
stint,
|
|
||||||
eth/rlp, enr, node
|
eth/rlp, enr, node
|
||||||
|
|
||||||
{.push raises: [Defect].}
|
{.push raises: [Defect].}
|
||||||
|
@ -117,17 +116,6 @@ proc append*(writer: var RlpWriter, value: RequestId) =
|
||||||
proc hash*(reqId: RequestId): Hash =
|
proc hash*(reqId: RequestId): Hash =
|
||||||
hash(reqId.id)
|
hash(reqId.id)
|
||||||
|
|
||||||
proc toBytes*(id: NodeId): array[32, byte] {.inline.} =
|
|
||||||
id.toByteArrayBE()
|
|
||||||
|
|
||||||
proc hash*(id: NodeId): Hash {.inline.} =
|
|
||||||
result = hashData(unsafeAddr id, sizeof(id))
|
|
||||||
|
|
||||||
# TODO: To make this work I think we also need to implement `==` due to case
|
|
||||||
# fields in object
|
|
||||||
proc hash*(address: Address): Hash {.inline.} =
|
|
||||||
hashData(unsafeAddr address, sizeof(address))
|
|
||||||
|
|
||||||
proc hash*(key: HandshakeKey): Hash =
|
proc hash*(key: HandshakeKey): Hash =
|
||||||
result = key.nodeId.hash !& key.address.hash
|
result = key.nodeId.hash !& key.address.hash
|
||||||
result = !$result
|
result = !$result
|
||||||
|
|
Loading…
Reference in New Issue