diff --git a/p2p/pex/addrbook.go b/p2p/pex/addrbook.go index 6e8397cd6..c9c372638 100644 --- a/p2p/pex/addrbook.go +++ b/p2p/pex/addrbook.go @@ -769,16 +769,17 @@ func (a *addrBook) addBadPeer(addr *p2p.NetAddress, banTime time.Duration) bool // check it exists in addrbook ka := a.addrLookup[addr.ID] // check address is not already there - if ka != nil { - if _, alreadyBadPeer := a.badPeers[addr.ID]; !alreadyBadPeer { - // add to bad peer list - ka.ban(banTime) - a.badPeers[addr.ID] = ka - a.Logger.Info("Add address to blacklist", "addr", addr) - } - return true + if ka == nil { + return false + } + + if _, alreadyBadPeer := a.badPeers[addr.ID]; !alreadyBadPeer { + // add to bad peer list + ka.ban(banTime) + a.badPeers[addr.ID] = ka + a.Logger.Info("Add address to blacklist", "addr", addr) } - return false + return true } //--------------------------------------------------------------------- diff --git a/p2p/pex/errors.go b/p2p/pex/errors.go index 1892b5fff..1fc54ea50 100644 --- a/p2p/pex/errors.go +++ b/p2p/pex/errors.go @@ -64,7 +64,7 @@ func (err ErrAddrBookInvalidAddr) Error() string { return fmt.Sprintf("Cannot add invalid address %v: %v", err.Addr, err.AddrErr) } -// Err is thrown when the address is banned and therefore cannot be used +// ErrAddressBanned is thrown when the address has been banned and therefore cannot be used type ErrAddressBanned struct { Addr *p2p.NetAddress } diff --git a/p2p/pex/known_address.go b/p2p/pex/known_address.go index 674b66553..e98a9e97e 100644 --- a/p2p/pex/known_address.go +++ b/p2p/pex/known_address.go @@ -56,7 +56,9 @@ func (ka *knownAddress) markGood() { } func (ka *knownAddress) ban(banTime time.Duration) { - ka.LastBanTime = time.Now().Add(banTime) + if ka.LastBanTime.Before(time.Now().Add(banTime)) { + ka.LastBanTime = time.Now().Add(banTime) + } } func (ka *knownAddress) isBanned() bool {