diff --git a/swarm/pss/pss.go b/swarm/pss/pss.go index e709f12885..ab9b40e425 100644 --- a/swarm/pss/pss.go +++ b/swarm/pss/pss.go @@ -947,20 +947,22 @@ func (p *Pss) forward(msg *PssMsg) error { // proximity order function matching up to neighbourhoodDepth bits (po <= neighbourhoodDepth) pof := pot.DefaultPof(neighbourhoodDepth) - depth, _ := pof(to, p.BaseAddr(), 0) - if depth > luminosityRadius { - depth = luminosityRadius + + // soft threshold of msg propagation + threshold, _ := pof(to, p.BaseAddr(), 0) + if threshold > luminosityRadius { + threshold = luminosityRadius } - // if measured from the recipient address (as opposed to the base address), then peers - // that fall in the same proximity bin as recipient address will appear one bit closer - // (at least), under condition that these additional bits exist in the recipient address. - if depth < luminosityRadius && depth < neighbourhoodDepth { - depth++ + // if measured from the recipient address as opposed to the base address (see Kademlia.EachConn + // call below), then peers that fall in the same proximity bin as recipient address will appear + // [at least] one bit closer, but only if these additional bits are given in the recipient address. + if threshold < luminosityRadius && threshold < neighbourhoodDepth { + threshold++ } p.Kademlia.EachConn(to, addressLength*8, func(sp *network.Peer, po int, _ bool) bool { - if po < depth && sent > 0 { + if po < threshold && sent > 0 { return false // stop iterating } if sendMessage(p, sp, msg) {