mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-12 06:53:46 +00:00
fix:add justseen node
Signed-off-by: Chen Kai <281165273grape@gmail.com>
This commit is contained in:
parent
12169d3848
commit
a8ba15d62c
3 changed files with 34 additions and 9 deletions
|
|
@ -10,6 +10,7 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover/portalwire"
|
"github.com/ethereum/go-ethereum/p2p/discover/portalwire"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
|
|
@ -18,6 +19,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
glogger := log.NewGlogHandler(log.NewTerminalHandler(os.Stderr, true))
|
||||||
|
slogVerbosity := log.FromLegacyLevel(5)
|
||||||
|
glogger.Verbosity(slogVerbosity)
|
||||||
|
log.SetDefault(log.NewLogger(glogger))
|
||||||
|
|
||||||
var privateKey *ecdsa.PrivateKey
|
var privateKey *ecdsa.PrivateKey
|
||||||
var err error
|
var err error
|
||||||
privateKeyHex := os.Getenv("HIVE_CLIENT_PRIVATE_KEY")
|
privateKeyHex := os.Getenv("HIVE_CLIENT_PRIVATE_KEY")
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,9 @@ func (d *DiscV5API) AddEnr(enr string) (bool, error) {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
d.DiscV5.tab.addSeenNode(wrapNode(n))
|
wn := wrapNode(n)
|
||||||
|
wn.livenessChecks++
|
||||||
|
d.DiscV5.tab.addVerifiedNode(wn)
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,7 +227,9 @@ func (p *PortalAPI) HistoryAddEnr(enr string) (bool, error) {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
p.portalProtocol.table.addSeenNode(wrapNode(n))
|
wn := wrapNode(n)
|
||||||
|
wn.livenessChecks++
|
||||||
|
p.portalProtocol.table.addVerifiedNode(wn)
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -237,7 +241,9 @@ func (p *PortalAPI) AddEnrs(enrs []string) bool {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
p.portalProtocol.table.addSeenNode(wrapNode(n))
|
wn := wrapNode(n)
|
||||||
|
wn.livenessChecks++
|
||||||
|
p.portalProtocol.table.addVerifiedNode(wn)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -202,12 +201,12 @@ func NewPortalProtocol(config *PortalProtocolConfig, protocolId string, privateK
|
||||||
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||||
if ipnet.IP.To4() != nil {
|
if ipnet.IP.To4() != nil {
|
||||||
localNode.SetStaticIP(ipnet.IP)
|
localNode.SetStaticIP(ipnet.IP)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closeCtx, cancelCloseCtx := context.WithCancel(context.Background())
|
closeCtx, cancelCloseCtx := context.WithCancel(context.Background())
|
||||||
|
|
||||||
log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true)))
|
|
||||||
protocol := &PortalProtocol{
|
protocol := &PortalProtocol{
|
||||||
protocolId: protocolId,
|
protocolId: protocolId,
|
||||||
ListenAddr: config.ListenAddr,
|
ListenAddr: config.ListenAddr,
|
||||||
|
|
@ -248,6 +247,9 @@ func (p *PortalProtocol) Start() error {
|
||||||
for i := 0; i < concurrentOffers; i++ {
|
for i := 0; i < concurrentOffers; i++ {
|
||||||
go p.offerWorker()
|
go p.offerWorker()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wait for the routing table to be initialized
|
||||||
|
<-p.table.initDone
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -516,6 +518,7 @@ func (p *PortalProtocol) processOffer(target *enode.Node, resp []byte, request *
|
||||||
}
|
}
|
||||||
|
|
||||||
p.log.Trace("Received accept response", "id", target.ID(), "accept", accept)
|
p.log.Trace("Received accept response", "id", target.ID(), "accept", accept)
|
||||||
|
p.setJustSeen(target)
|
||||||
|
|
||||||
var contentKeyLen int
|
var contentKeyLen int
|
||||||
if request.Kind == TransientOfferRequestKind {
|
if request.Kind == TransientOfferRequestKind {
|
||||||
|
|
@ -636,6 +639,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
|
||||||
}
|
}
|
||||||
|
|
||||||
p.log.Trace("Received content response", "id", target.ID(), "content", content)
|
p.log.Trace("Received content response", "id", target.ID(), "content", content)
|
||||||
|
p.setJustSeen(target)
|
||||||
return resp[1], content.Content, nil
|
return resp[1], content.Content, nil
|
||||||
case portalwire.ContentConnIdSelector:
|
case portalwire.ContentConnIdSelector:
|
||||||
connIdMsg := &portalwire.ConnectionId{}
|
connIdMsg := &portalwire.ConnectionId{}
|
||||||
|
|
@ -645,6 +649,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
|
||||||
}
|
}
|
||||||
|
|
||||||
p.log.Trace("Received content response", "id", target.ID(), "connIdMsg", connIdMsg)
|
p.log.Trace("Received content response", "id", target.ID(), "connIdMsg", connIdMsg)
|
||||||
|
p.setJustSeen(target)
|
||||||
connctx, conncancel := context.WithTimeout(p.closeCtx, defaultUTPConnectTimeout)
|
connctx, conncancel := context.WithTimeout(p.closeCtx, defaultUTPConnectTimeout)
|
||||||
laddr := p.utp.Addr().(*utp.Addr)
|
laddr := p.utp.Addr().(*utp.Addr)
|
||||||
raddr := &utp.Addr{IP: target.IP(), Port: target.UDP()}
|
raddr := &utp.Addr{IP: target.IP(), Port: target.UDP()}
|
||||||
|
|
@ -686,7 +691,7 @@ func (p *PortalProtocol) processContent(target *enode.Node, resp []byte) (byte,
|
||||||
}
|
}
|
||||||
|
|
||||||
p.log.Trace("Received content response", "id", target.ID(), "enrs", enrs)
|
p.log.Trace("Received content response", "id", target.ID(), "enrs", enrs)
|
||||||
|
p.setJustSeen(target)
|
||||||
nodes := p.filterNodes(target, enrs.Enrs, nil)
|
nodes := p.filterNodes(target, enrs.Enrs, nil)
|
||||||
return resp[1], nodes, nil
|
return resp[1], nodes, nil
|
||||||
default:
|
default:
|
||||||
|
|
@ -705,12 +710,18 @@ func (p *PortalProtocol) processNodes(target *enode.Node, resp []byte, distances
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
p.table.addVerifiedNode(wrapNode(target))
|
p.setJustSeen(target)
|
||||||
nodes := p.filterNodes(target, nodesResp.Enrs, distances)
|
nodes := p.filterNodes(target, nodesResp.Enrs, distances)
|
||||||
|
|
||||||
return nodes, nil
|
return nodes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PortalProtocol) setJustSeen(target *enode.Node) {
|
||||||
|
wn := wrapNode(target)
|
||||||
|
wn.livenessChecks++
|
||||||
|
p.table.addVerifiedNode(wn)
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PortalProtocol) filterNodes(target *enode.Node, enrs [][]byte, distances []uint) []*enode.Node {
|
func (p *PortalProtocol) filterNodes(target *enode.Node, enrs [][]byte, distances []uint) []*enode.Node {
|
||||||
var (
|
var (
|
||||||
nodes []*enode.Node
|
nodes []*enode.Node
|
||||||
|
|
@ -761,9 +772,9 @@ func (p *PortalProtocol) processPong(target *enode.Node, resp []byte) (*portalwi
|
||||||
}
|
}
|
||||||
|
|
||||||
p.log.Trace("Received pong response", "id", target.ID(), "pong", pong, "customPayload", customPayload)
|
p.log.Trace("Received pong response", "id", target.ID(), "pong", pong, "customPayload", customPayload)
|
||||||
|
p.setJustSeen(target)
|
||||||
|
|
||||||
p.radiusCache.Set([]byte(target.ID().String()), customPayload.Radius)
|
p.radiusCache.Set([]byte(target.ID().String()), customPayload.Radius)
|
||||||
p.table.addVerifiedNode(wrapNode(target))
|
|
||||||
return pong, nil
|
return pong, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1308,7 +1319,9 @@ func (p *PortalProtocol) lookupWorker(destNode *node, target enode.ID) ([]*node,
|
||||||
}
|
}
|
||||||
for _, n := range r {
|
for _, n := range r {
|
||||||
if n.ID() != p.Self().ID() {
|
if n.ID() != p.Self().ID() {
|
||||||
nodes.push(wrapNode(n), portalFindnodesResultLimit)
|
wn := wrapNode(n)
|
||||||
|
p.table.addSeenNode(wn)
|
||||||
|
nodes.push(wn, portalFindnodesResultLimit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nodes.entries, err
|
return nodes.entries, err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue