mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +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/crypto"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||
"github.com/ethereum/go-ethereum/p2p/discover/portalwire"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
|
|
@ -18,6 +19,11 @@ import (
|
|||
)
|
||||
|
||||
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 err error
|
||||
privateKeyHex := os.Getenv("HIVE_CLIENT_PRIVATE_KEY")
|
||||
|
|
|
|||
|
|
@ -76,7 +76,9 @@ func (d *DiscV5API) AddEnr(enr string) (bool, error) {
|
|||
return false, err
|
||||
}
|
||||
|
||||
d.DiscV5.tab.addSeenNode(wrapNode(n))
|
||||
wn := wrapNode(n)
|
||||
wn.livenessChecks++
|
||||
d.DiscV5.tab.addVerifiedNode(wn)
|
||||
return true, nil
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +227,9 @@ func (p *PortalAPI) HistoryAddEnr(enr string) (bool, error) {
|
|||
return false, err
|
||||
}
|
||||
|
||||
p.portalProtocol.table.addSeenNode(wrapNode(n))
|
||||
wn := wrapNode(n)
|
||||
wn.livenessChecks++
|
||||
p.portalProtocol.table.addVerifiedNode(wn)
|
||||
return true, nil
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +241,9 @@ func (p *PortalAPI) AddEnrs(enrs []string) bool {
|
|||
continue
|
||||
}
|
||||
|
||||
p.portalProtocol.table.addSeenNode(wrapNode(n))
|
||||
wn := wrapNode(n)
|
||||
wn.livenessChecks++
|
||||
p.portalProtocol.table.addVerifiedNode(wn)
|
||||
}
|
||||
|
||||
return true
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import (
|
|||
"math/big"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
|
|
@ -202,12 +201,12 @@ func NewPortalProtocol(config *PortalProtocolConfig, protocolId string, privateK
|
|||
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||
if ipnet.IP.To4() != nil {
|
||||
localNode.SetStaticIP(ipnet.IP)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
closeCtx, cancelCloseCtx := context.WithCancel(context.Background())
|
||||
|
||||
log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true)))
|
||||
protocol := &PortalProtocol{
|
||||
protocolId: protocolId,
|
||||
ListenAddr: config.ListenAddr,
|
||||
|
|
@ -248,6 +247,9 @@ func (p *PortalProtocol) Start() error {
|
|||
for i := 0; i < concurrentOffers; i++ {
|
||||
go p.offerWorker()
|
||||
}
|
||||
|
||||
// wait for the routing table to be initialized
|
||||
<-p.table.initDone
|
||||
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.setJustSeen(target)
|
||||
|
||||
var contentKeyLen int
|
||||
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.setJustSeen(target)
|
||||
return resp[1], content.Content, nil
|
||||
case portalwire.ContentConnIdSelector:
|
||||
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.setJustSeen(target)
|
||||
connctx, conncancel := context.WithTimeout(p.closeCtx, defaultUTPConnectTimeout)
|
||||
laddr := p.utp.Addr().(*utp.Addr)
|
||||
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.setJustSeen(target)
|
||||
nodes := p.filterNodes(target, enrs.Enrs, nil)
|
||||
return resp[1], nodes, nil
|
||||
default:
|
||||
|
|
@ -705,12 +710,18 @@ func (p *PortalProtocol) processNodes(target *enode.Node, resp []byte, distances
|
|||
return nil, err
|
||||
}
|
||||
|
||||
p.table.addVerifiedNode(wrapNode(target))
|
||||
p.setJustSeen(target)
|
||||
nodes := p.filterNodes(target, nodesResp.Enrs, distances)
|
||||
|
||||
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 {
|
||||
var (
|
||||
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.setJustSeen(target)
|
||||
|
||||
p.radiusCache.Set([]byte(target.ID().String()), customPayload.Radius)
|
||||
p.table.addVerifiedNode(wrapNode(target))
|
||||
return pong, nil
|
||||
}
|
||||
|
||||
|
|
@ -1308,7 +1319,9 @@ func (p *PortalProtocol) lookupWorker(destNode *node, target enode.ID) ([]*node,
|
|||
}
|
||||
for _, n := range r {
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue