Commit bfce0038 authored by Viktor Trón's avatar Viktor Trón Committed by Balint Gabor

Kademlia refactor (#17641)

* swarm/network: simplify kademlia/hive; rid interfaces

* swarm, swarm/network/stream, swarm/netork/simulations,, swarm/pss: adapt to new Kad API

* swarm/network: minor changes re review; add missing lock to NeighbourhoodDepthC
parent b06ff563
...@@ -26,30 +26,30 @@ import ( ...@@ -26,30 +26,30 @@ import (
// discovery bzz extension for requesting and relaying node address records // discovery bzz extension for requesting and relaying node address records
// discPeer wraps BzzPeer and embeds an Overlay connectivity driver // Peer wraps BzzPeer and embeds Kademlia overlay connectivity driver
type discPeer struct { type Peer struct {
*BzzPeer *BzzPeer
overlay Overlay kad *Kademlia
sentPeers bool // whether we already sent peer closer to this address sentPeers bool // whether we already sent peer closer to this address
mtx sync.RWMutex mtx sync.RWMutex //
peers map[string]bool // tracks node records sent to the peer peers map[string]bool // tracks node records sent to the peer
depth uint8 // the proximity order advertised by remote as depth of saturation depth uint8 // the proximity order advertised by remote as depth of saturation
} }
// NewDiscovery constructs a discovery peer // NewPeer constructs a discovery peer
func newDiscovery(p *BzzPeer, o Overlay) *discPeer { func NewPeer(p *BzzPeer, kad *Kademlia) *Peer {
d := &discPeer{ d := &Peer{
overlay: o, kad: kad,
BzzPeer: p, BzzPeer: p,
peers: make(map[string]bool), peers: make(map[string]bool),
} }
// record remote as seen so we never send a peer its own record // record remote as seen so we never send a peer its own record
d.seen(d) d.seen(p.BzzAddr)
return d return d
} }
// HandleMsg is the message handler that delegates incoming messages // HandleMsg is the message handler that delegates incoming messages
func (d *discPeer) HandleMsg(ctx context.Context, msg interface{}) error { func (d *Peer) HandleMsg(ctx context.Context, msg interface{}) error {
switch msg := msg.(type) { switch msg := msg.(type) {
case *peersMsg: case *peersMsg:
...@@ -64,24 +64,18 @@ func (d *discPeer) HandleMsg(ctx context.Context, msg interface{}) error { ...@@ -64,24 +64,18 @@ func (d *discPeer) HandleMsg(ctx context.Context, msg interface{}) error {
} }
// NotifyDepth sends a message to all connections if depth of saturation is changed // NotifyDepth sends a message to all connections if depth of saturation is changed
func NotifyDepth(depth uint8, h Overlay) { func NotifyDepth(depth uint8, kad *Kademlia) {
f := func(val OverlayConn, po int, _ bool) bool { f := func(val *Peer, po int, _ bool) bool {
dp, ok := val.(*discPeer) val.NotifyDepth(depth)
if ok {
dp.NotifyDepth(depth)
}
return true return true
} }
h.EachConn(nil, 255, f) kad.EachConn(nil, 255, f)
} }
// NotifyPeer informs all peers about a newly added node // NotifyPeer informs all peers about a newly added node
func NotifyPeer(p OverlayAddr, k Overlay) { func NotifyPeer(p *BzzAddr, k *Kademlia) {
f := func(val OverlayConn, po int, _ bool) bool { f := func(val *Peer, po int, _ bool) bool {
dp, ok := val.(*discPeer) val.NotifyPeer(p, uint8(po))
if ok {
dp.NotifyPeer(p, uint8(po))
}
return true return true
} }
k.EachConn(p.Address(), 255, f) k.EachConn(p.Address(), 255, f)
...@@ -91,22 +85,20 @@ func NotifyPeer(p OverlayAddr, k Overlay) { ...@@ -91,22 +85,20 @@ func NotifyPeer(p OverlayAddr, k Overlay) {
// the peer's PO is within the recipients advertised depth // the peer's PO is within the recipients advertised depth
// OR the peer is closer to the recipient than self // OR the peer is closer to the recipient than self
// unless already notified during the connection session // unless already notified during the connection session
func (d *discPeer) NotifyPeer(a OverlayAddr, po uint8) { func (d *Peer) NotifyPeer(a *BzzAddr, po uint8) {
// immediately return // immediately return
if (po < d.getDepth() && pot.ProxCmp(d.localAddr, d, a) != 1) || d.seen(a) { if (po < d.getDepth() && pot.ProxCmp(d.localAddr, d, a) != 1) || d.seen(a) {
return return
} }
// log.Trace(fmt.Sprintf("%08x peer %08x notified of peer %08x", d.localAddr.Over()[:4], d.Address()[:4], a.Address()[:4]))
resp := &peersMsg{ resp := &peersMsg{
Peers: []*BzzAddr{ToAddr(a)}, Peers: []*BzzAddr{a},
} }
go d.Send(context.TODO(), resp) go d.Send(context.TODO(), resp)
} }
// NotifyDepth sends a subPeers Msg to the receiver notifying them about // NotifyDepth sends a subPeers Msg to the receiver notifying them about
// a change in the depth of saturation // a change in the depth of saturation
func (d *discPeer) NotifyDepth(po uint8) { func (d *Peer) NotifyDepth(po uint8) {
// log.Trace(fmt.Sprintf("%08x peer %08x notified of new depth %v", d.localAddr.Over()[:4], d.Address()[:4], po))
go d.Send(context.TODO(), &subPeersMsg{Depth: po}) go d.Send(context.TODO(), &subPeersMsg{Depth: po})
} }
...@@ -141,7 +133,7 @@ func (msg peersMsg) String() string { ...@@ -141,7 +133,7 @@ func (msg peersMsg) String() string {
// handlePeersMsg called by the protocol when receiving peerset (for target address) // handlePeersMsg called by the protocol when receiving peerset (for target address)
// list of nodes ([]PeerAddr in peersMsg) is added to the overlay db using the // list of nodes ([]PeerAddr in peersMsg) is added to the overlay db using the
// Register interface method // Register interface method
func (d *discPeer) handlePeersMsg(msg *peersMsg) error { func (d *Peer) handlePeersMsg(msg *peersMsg) error {
// register all addresses // register all addresses
if len(msg.Peers) == 0 { if len(msg.Peers) == 0 {
return nil return nil
...@@ -149,12 +141,12 @@ func (d *discPeer) handlePeersMsg(msg *peersMsg) error { ...@@ -149,12 +141,12 @@ func (d *discPeer) handlePeersMsg(msg *peersMsg) error {
for _, a := range msg.Peers { for _, a := range msg.Peers {
d.seen(a) d.seen(a)
NotifyPeer(a, d.overlay) NotifyPeer(a, d.kad)
} }
return d.overlay.Register(toOverlayAddrs(msg.Peers...)) return d.kad.Register(msg.Peers...)
} }
// subPeers msg is communicating the depth/sharpness/focus of the overlay table of a peer // subPeers msg is communicating the depth of the overlay table of a peer
type subPeersMsg struct { type subPeersMsg struct {
Depth uint8 Depth uint8
} }
...@@ -164,21 +156,20 @@ func (msg subPeersMsg) String() string { ...@@ -164,21 +156,20 @@ func (msg subPeersMsg) String() string {
return fmt.Sprintf("%T: request peers > PO%02d. ", msg, msg.Depth) return fmt.Sprintf("%T: request peers > PO%02d. ", msg, msg.Depth)
} }
func (d *discPeer) handleSubPeersMsg(msg *subPeersMsg) error { func (d *Peer) handleSubPeersMsg(msg *subPeersMsg) error {
if !d.sentPeers { if !d.sentPeers {
d.setDepth(msg.Depth) d.setDepth(msg.Depth)
var peers []*BzzAddr var peers []*BzzAddr
d.overlay.EachConn(d.Over(), 255, func(p OverlayConn, po int, isproxbin bool) bool { d.kad.EachConn(d.Over(), 255, func(p *Peer, po int, isproxbin bool) bool {
if pob, _ := pof(d, d.localAddr, 0); pob > po { if pob, _ := pof(d, d.localAddr, 0); pob > po {
return false return false
} }
if !d.seen(p) { if !d.seen(p.BzzAddr) {
peers = append(peers, ToAddr(p.Off())) peers = append(peers, p.BzzAddr)
} }
return true return true
}) })
if len(peers) > 0 { if len(peers) > 0 {
// log.Debug(fmt.Sprintf("%08x: %v peers sent to %v", d.overlay.BaseAddr(), len(peers), d))
go d.Send(context.TODO(), &peersMsg{Peers: peers}) go d.Send(context.TODO(), &peersMsg{Peers: peers})
} }
} }
...@@ -186,9 +177,9 @@ func (d *discPeer) handleSubPeersMsg(msg *subPeersMsg) error { ...@@ -186,9 +177,9 @@ func (d *discPeer) handleSubPeersMsg(msg *subPeersMsg) error {
return nil return nil
} }
// seen takes an Overlay peer and checks if it was sent to a peer already // seen takes an peer address and checks if it was sent to a peer already
// if not, marks the peer as sent // if not, marks the peer as sent
func (d *discPeer) seen(p OverlayPeer) bool { func (d *Peer) seen(p *BzzAddr) bool {
d.mtx.Lock() d.mtx.Lock()
defer d.mtx.Unlock() defer d.mtx.Unlock()
k := string(p.Address()) k := string(p.Address())
...@@ -199,12 +190,13 @@ func (d *discPeer) seen(p OverlayPeer) bool { ...@@ -199,12 +190,13 @@ func (d *discPeer) seen(p OverlayPeer) bool {
return false return false
} }
func (d *discPeer) getDepth() uint8 { func (d *Peer) getDepth() uint8 {
d.mtx.RLock() d.mtx.RLock()
defer d.mtx.RUnlock() defer d.mtx.RUnlock()
return d.depth return d.depth
} }
func (d *discPeer) setDepth(depth uint8) {
func (d *Peer) setDepth(depth uint8) {
d.mtx.Lock() d.mtx.Lock()
defer d.mtx.Unlock() defer d.mtx.Unlock()
d.depth = depth d.depth = depth
......
...@@ -33,7 +33,7 @@ func TestDiscovery(t *testing.T) { ...@@ -33,7 +33,7 @@ func TestDiscovery(t *testing.T) {
id := s.IDs[0] id := s.IDs[0]
raddr := NewAddrFromNodeID(id) raddr := NewAddrFromNodeID(id)
pp.Register([]OverlayAddr{OverlayAddr(raddr)}) pp.Register(raddr)
// start the hive and wait for the connection // start the hive and wait for the connection
pp.Start(s.Server) pp.Start(s.Server)
......
...@@ -32,31 +32,10 @@ import ( ...@@ -32,31 +32,10 @@ import (
Hive is the logistic manager of the swarm Hive is the logistic manager of the swarm
When the hive is started, a forever loop is launched that When the hive is started, a forever loop is launched that
asks the Overlay Topology driver (e.g., generic kademlia nodetable) asks the kademlia nodetable
to suggest peers to bootstrap connectivity to suggest peers to bootstrap connectivity
*/ */
// Overlay is the interface for kademlia (or other topology drivers)
type Overlay interface {
// suggest peers to connect to
SuggestPeer() (OverlayAddr, int, bool)
// register and deregister peer connections
On(OverlayConn) (depth uint8, changed bool)
Off(OverlayConn)
// register peer addresses
Register([]OverlayAddr) error
// iterate over connected peers
EachConn([]byte, int, func(OverlayConn, int, bool) bool)
// iterate over known peers (address records)
EachAddr([]byte, int, func(OverlayAddr, int, bool) bool)
// pretty print the connectivity
String() string
// base Overlay address of the node itself
BaseAddr() []byte
// connectivity health check used for testing
Healthy(*PeerPot) *Health
}
// HiveParams holds the config options to hive // HiveParams holds the config options to hive
type HiveParams struct { type HiveParams struct {
Discovery bool // if want discovery of not Discovery bool // if want discovery of not
...@@ -78,7 +57,7 @@ func NewHiveParams() *HiveParams { ...@@ -78,7 +57,7 @@ func NewHiveParams() *HiveParams {
// Hive manages network connections of the swarm node // Hive manages network connections of the swarm node
type Hive struct { type Hive struct {
*HiveParams // settings *HiveParams // settings
Overlay // the overlay connectiviy driver *Kademlia // the overlay connectiviy driver
Store state.Store // storage interface to save peers across sessions Store state.Store // storage interface to save peers across sessions
addPeer func(*discover.Node) // server callback to connect to a peer addPeer func(*discover.Node) // server callback to connect to a peer
// bookkeeping // bookkeeping
...@@ -88,12 +67,12 @@ type Hive struct { ...@@ -88,12 +67,12 @@ type Hive struct {
// NewHive constructs a new hive // NewHive constructs a new hive
// HiveParams: config parameters // HiveParams: config parameters
// Overlay: connectivity driver using a network topology // Kademlia: connectivity driver using a network topology
// StateStore: to save peers across sessions // StateStore: to save peers across sessions
func NewHive(params *HiveParams, overlay Overlay, store state.Store) *Hive { func NewHive(params *HiveParams, kad *Kademlia, store state.Store) *Hive {
return &Hive{ return &Hive{
HiveParams: params, HiveParams: params,
Overlay: overlay, Kademlia: kad,
Store: store, Store: store,
} }
} }
...@@ -133,7 +112,7 @@ func (h *Hive) Stop() error { ...@@ -133,7 +112,7 @@ func (h *Hive) Stop() error {
} }
} }
log.Info(fmt.Sprintf("%08x hive stopped, dropping peers", h.BaseAddr()[:4])) log.Info(fmt.Sprintf("%08x hive stopped, dropping peers", h.BaseAddr()[:4]))
h.EachConn(nil, 255, func(p OverlayConn, _ int, _ bool) bool { h.EachConn(nil, 255, func(p *Peer, _ int, _ bool) bool {
log.Info(fmt.Sprintf("%08x dropping peer %08x", h.BaseAddr()[:4], p.Address()[:4])) log.Info(fmt.Sprintf("%08x dropping peer %08x", h.BaseAddr()[:4], p.Address()[:4]))
p.Drop(nil) p.Drop(nil)
return true return true
...@@ -151,14 +130,14 @@ func (h *Hive) connect() { ...@@ -151,14 +130,14 @@ func (h *Hive) connect() {
addr, depth, changed := h.SuggestPeer() addr, depth, changed := h.SuggestPeer()
if h.Discovery && changed { if h.Discovery && changed {
NotifyDepth(uint8(depth), h) NotifyDepth(uint8(depth), h.Kademlia)
} }
if addr == nil { if addr == nil {
continue continue
} }
log.Trace(fmt.Sprintf("%08x hive connect() suggested %08x", h.BaseAddr()[:4], addr.Address()[:4])) log.Trace(fmt.Sprintf("%08x hive connect() suggested %08x", h.BaseAddr()[:4], addr.Address()[:4]))
under, err := discover.ParseNode(string(addr.(Addr).Under())) under, err := discover.ParseNode(string(addr.Under()))
if err != nil { if err != nil {
log.Warn(fmt.Sprintf("%08x unable to connect to bee %08x: invalid node URL: %v", h.BaseAddr()[:4], addr.Address()[:4], err)) log.Warn(fmt.Sprintf("%08x unable to connect to bee %08x: invalid node URL: %v", h.BaseAddr()[:4], addr.Address()[:4], err))
continue continue
...@@ -170,19 +149,19 @@ func (h *Hive) connect() { ...@@ -170,19 +149,19 @@ func (h *Hive) connect() {
// Run protocol run function // Run protocol run function
func (h *Hive) Run(p *BzzPeer) error { func (h *Hive) Run(p *BzzPeer) error {
dp := newDiscovery(p, h) dp := NewPeer(p, h.Kademlia)
depth, changed := h.On(dp) depth, changed := h.On(dp)
// if we want discovery, advertise change of depth // if we want discovery, advertise change of depth
if h.Discovery { if h.Discovery {
if changed { if changed {
// if depth changed, send to all peers // if depth changed, send to all peers
NotifyDepth(depth, h) NotifyDepth(depth, h.Kademlia)
} else { } else {
// otherwise just send depth to new peer // otherwise just send depth to new peer
dp.NotifyDepth(depth) dp.NotifyDepth(depth)
} }
} }
NotifyPeer(p.Off(), h) NotifyPeer(p.BzzAddr, h.Kademlia)
defer h.Off(dp) defer h.Off(dp)
return dp.Run(dp.HandleMsg) return dp.Run(dp.HandleMsg)
} }
...@@ -206,17 +185,6 @@ func (h *Hive) PeerInfo(id discover.NodeID) interface{} { ...@@ -206,17 +185,6 @@ func (h *Hive) PeerInfo(id discover.NodeID) interface{} {
} }
} }
// ToAddr returns the serialisable version of u
func ToAddr(pa OverlayPeer) *BzzAddr {
if addr, ok := pa.(*BzzAddr); ok {
return addr
}
if p, ok := pa.(*discPeer); ok {
return p.BzzAddr
}
return pa.(*BzzPeer).BzzAddr
}
// loadPeers, savePeer implement persistence callback/ // loadPeers, savePeer implement persistence callback/
func (h *Hive) loadPeers() error { func (h *Hive) loadPeers() error {
var as []*BzzAddr var as []*BzzAddr
...@@ -230,28 +198,19 @@ func (h *Hive) loadPeers() error { ...@@ -230,28 +198,19 @@ func (h *Hive) loadPeers() error {
} }
log.Info(fmt.Sprintf("hive %08x: peers loaded", h.BaseAddr()[:4])) log.Info(fmt.Sprintf("hive %08x: peers loaded", h.BaseAddr()[:4]))
return h.Register(toOverlayAddrs(as...)) return h.Register(as...)
}
// toOverlayAddrs transforms an array of BzzAddr to OverlayAddr
func toOverlayAddrs(as ...*BzzAddr) (oas []OverlayAddr) {
for _, a := range as {
oas = append(oas, OverlayAddr(a))
}
return
} }
// savePeers, savePeer implement persistence callback/ // savePeers, savePeer implement persistence callback/
func (h *Hive) savePeers() error { func (h *Hive) savePeers() error {
var peers []*BzzAddr var peers []*BzzAddr
h.Overlay.EachAddr(nil, 256, func(pa OverlayAddr, i int, _ bool) bool { h.Kademlia.EachAddr(nil, 256, func(pa *BzzAddr, i int, _ bool) bool {
if pa == nil { if pa == nil {
log.Warn(fmt.Sprintf("empty addr: %v", i)) log.Warn(fmt.Sprintf("empty addr: %v", i))
return true return true
} }
apa := ToAddr(pa) log.Trace("saving peer", "peer", pa)
log.Trace("saving peer", "peer", apa) peers = append(peers, pa)
peers = append(peers, apa)
return true return true
}) })
if err := h.Store.Put("peers", peers); err != nil { if err := h.Store.Put("peers", peers); err != nil {
......
...@@ -41,7 +41,7 @@ func TestRegisterAndConnect(t *testing.T) { ...@@ -41,7 +41,7 @@ func TestRegisterAndConnect(t *testing.T) {
id := s.IDs[0] id := s.IDs[0]
raddr := NewAddrFromNodeID(id) raddr := NewAddrFromNodeID(id)
pp.Register([]OverlayAddr{OverlayAddr(raddr)}) pp.Register(raddr)
// start the hive and wait for the connection // start the hive and wait for the connection
err := pp.Start(s.Server) err := pp.Start(s.Server)
...@@ -77,7 +77,7 @@ func TestHiveStatePersistance(t *testing.T) { ...@@ -77,7 +77,7 @@ func TestHiveStatePersistance(t *testing.T) {
peers := make(map[string]bool) peers := make(map[string]bool)
for _, id := range s.IDs { for _, id := range s.IDs {
raddr := NewAddrFromNodeID(id) raddr := NewAddrFromNodeID(id)
pp.Register([]OverlayAddr{OverlayAddr(raddr)}) pp.Register(raddr)
peers[raddr.String()] = true peers[raddr.String()] = true
} }
...@@ -97,8 +97,8 @@ func TestHiveStatePersistance(t *testing.T) { ...@@ -97,8 +97,8 @@ func TestHiveStatePersistance(t *testing.T) {
pp.Start(s1.Server) pp.Start(s1.Server)
i := 0 i := 0
pp.Overlay.EachAddr(nil, 256, func(addr OverlayAddr, po int, nn bool) bool { pp.Kademlia.EachAddr(nil, 256, func(addr *BzzAddr, po int, nn bool) bool {
delete(peers, addr.(*BzzAddr).String()) delete(peers, addr.String())
i++ i++
return true return true
}) })
......
This diff is collapsed.
This diff is collapsed.
...@@ -92,7 +92,7 @@ func TestNetworkID(t *testing.T) { ...@@ -92,7 +92,7 @@ func TestNetworkID(t *testing.T) {
if kademlias[node].addrs.Size() != len(netIDGroup)-1 { if kademlias[node].addrs.Size() != len(netIDGroup)-1 {
t.Fatalf("Kademlia size has not expected peer size. Kademlia size: %d, expected size: %d", kademlias[node].addrs.Size(), len(netIDGroup)-1) t.Fatalf("Kademlia size has not expected peer size. Kademlia size: %d, expected size: %d", kademlias[node].addrs.Size(), len(netIDGroup)-1)
} }
kademlias[node].EachAddr(nil, 0, func(addr OverlayAddr, _ int, _ bool) bool { kademlias[node].EachAddr(nil, 0, func(addr *BzzAddr, _ int, _ bool) bool {
found := false found := false
for _, nd := range netIDGroup { for _, nd := range netIDGroup {
p := ToOverlayAddr(nd.Bytes()) p := ToOverlayAddr(nd.Bytes())
......
...@@ -62,32 +62,6 @@ var DiscoverySpec = &protocols.Spec{ ...@@ -62,32 +62,6 @@ var DiscoverySpec = &protocols.Spec{
}, },
} }
// Addr interface that peerPool needs
type Addr interface {
OverlayPeer
Over() []byte
Under() []byte
String() string
Update(OverlayAddr) OverlayAddr
}
// Peer interface represents an live peer connection
type Peer interface {
Addr // the address of a peer
Conn // the live connection (protocols.Peer)
LastActive() time.Time // last time active
}
// Conn interface represents an live peer connection
type Conn interface {
ID() discover.NodeID // the key that uniquely identifies the Node for the peerPool
Handshake(context.Context, interface{}, func(interface{}) error) (interface{}, error) // can send messages
Send(context.Context, interface{}) error // can send messages
Drop(error) // disconnect this peer
Run(func(context.Context, interface{}) error) error // the run function to run a protocol
Off() OverlayAddr
}
// BzzConfig captures the config params used by the hive // BzzConfig captures the config params used by the hive
type BzzConfig struct { type BzzConfig struct {
OverlayAddr []byte // base address of the overlay network OverlayAddr []byte // base address of the overlay network
...@@ -114,7 +88,7 @@ type Bzz struct { ...@@ -114,7 +88,7 @@ type Bzz struct {
// * bzz config // * bzz config
// * overlay driver // * overlay driver
// * peer store // * peer store
func NewBzz(config *BzzConfig, kad Overlay, store state.Store, streamerSpec *protocols.Spec, streamerRun func(*BzzPeer) error) *Bzz { func NewBzz(config *BzzConfig, kad *Kademlia, store state.Store, streamerSpec *protocols.Spec, streamerRun func(*BzzPeer) error) *Bzz {
return &Bzz{ return &Bzz{
Hive: NewHive(config.HiveParams, kad, store), Hive: NewHive(config.HiveParams, kad, store),
NetworkID: config.NetworkID, NetworkID: config.NetworkID,
...@@ -131,7 +105,7 @@ func (b *Bzz) UpdateLocalAddr(byteaddr []byte) *BzzAddr { ...@@ -131,7 +105,7 @@ func (b *Bzz) UpdateLocalAddr(byteaddr []byte) *BzzAddr {
b.localAddr = b.localAddr.Update(&BzzAddr{ b.localAddr = b.localAddr.Update(&BzzAddr{
UAddr: byteaddr, UAddr: byteaddr,
OAddr: b.localAddr.OAddr, OAddr: b.localAddr.OAddr,
}).(*BzzAddr) })
return b.localAddr return b.localAddr
} }
...@@ -274,7 +248,7 @@ type BzzPeer struct { ...@@ -274,7 +248,7 @@ type BzzPeer struct {
LightNode bool LightNode bool
} }
func NewBzzTestPeer(p *protocols.Peer, addr *BzzAddr) *BzzPeer { func NewBzzPeer(p *protocols.Peer, addr *BzzAddr) *BzzPeer {
return &BzzPeer{ return &BzzPeer{
Peer: p, Peer: p,
localAddr: addr, localAddr: addr,
...@@ -282,11 +256,6 @@ func NewBzzTestPeer(p *protocols.Peer, addr *BzzAddr) *BzzPeer { ...@@ -282,11 +256,6 @@ func NewBzzTestPeer(p *protocols.Peer, addr *BzzAddr) *BzzPeer {
} }
} }
// Off returns the overlay peer record for offline persistence
func (p *BzzPeer) Off() OverlayAddr {
return p.BzzAddr
}
// LastActive returns the time the peer was last active // LastActive returns the time the peer was last active
func (p *BzzPeer) LastActive() time.Time { func (p *BzzPeer) LastActive() time.Time {
return p.lastActive return p.lastActive
...@@ -388,8 +357,8 @@ func (a *BzzAddr) ID() discover.NodeID { ...@@ -388,8 +357,8 @@ func (a *BzzAddr) ID() discover.NodeID {
} }
// Update updates the underlay address of a peer record // Update updates the underlay address of a peer record
func (a *BzzAddr) Update(na OverlayAddr) OverlayAddr { func (a *BzzAddr) Update(na *BzzAddr) *BzzAddr {
return &BzzAddr{a.OAddr, na.(Addr).Under()} return &BzzAddr{a.OAddr, na.UAddr}
} }
// String pretty prints the address // String pretty prints the address
...@@ -410,9 +379,9 @@ func RandomAddr() *BzzAddr { ...@@ -410,9 +379,9 @@ func RandomAddr() *BzzAddr {
} }
// NewNodeIDFromAddr transforms the underlay address to an adapters.NodeID // NewNodeIDFromAddr transforms the underlay address to an adapters.NodeID
func NewNodeIDFromAddr(addr Addr) discover.NodeID { func NewNodeIDFromAddr(addr *BzzAddr) discover.NodeID {
log.Info(fmt.Sprintf("uaddr=%s", string(addr.Under()))) log.Info(fmt.Sprintf("uaddr=%s", string(addr.UAddr)))
node := discover.MustParseNode(string(addr.Under())) node := discover.MustParseNode(string(addr.UAddr))
return node.ID return node.ID
} }
......
...@@ -556,8 +556,8 @@ func newService(ctx *adapters.ServiceContext) (node.Service, error) { ...@@ -556,8 +556,8 @@ func newService(ctx *adapters.ServiceContext) (node.Service, error) {
kp.MinProxBinSize = testMinProxBinSize kp.MinProxBinSize = testMinProxBinSize
if ctx.Config.Reachable != nil { if ctx.Config.Reachable != nil {
kp.Reachable = func(o network.OverlayAddr) bool { kp.Reachable = func(o *network.BzzAddr) bool {
return ctx.Config.Reachable(o.(*network.BzzAddr).ID()) return ctx.Config.Reachable(o.ID())
} }
} }
kad := network.NewKademlia(addr.Over(), kp) kad := network.NewKademlia(addr.Over(), kp)
......
...@@ -47,15 +47,15 @@ var ( ...@@ -47,15 +47,15 @@ var (
type Delivery struct { type Delivery struct {
db *storage.DBAPI db *storage.DBAPI
overlay network.Overlay kad *network.Kademlia
receiveC chan *ChunkDeliveryMsg receiveC chan *ChunkDeliveryMsg
getPeer func(discover.NodeID) *Peer getPeer func(discover.NodeID) *Peer
} }
func NewDelivery(overlay network.Overlay, db *storage.DBAPI) *Delivery { func NewDelivery(kad *network.Kademlia, db *storage.DBAPI) *Delivery {
d := &Delivery{ d := &Delivery{
db: db, db: db,
overlay: overlay, kad: kad,
receiveC: make(chan *ChunkDeliveryMsg, deliveryCap), receiveC: make(chan *ChunkDeliveryMsg, deliveryCap),
} }
...@@ -172,7 +172,7 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req * ...@@ -172,7 +172,7 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *
t := time.NewTimer(10 * time.Minute) t := time.NewTimer(10 * time.Minute)
defer t.Stop() defer t.Stop()
log.Debug("waiting delivery", "peer", sp.ID(), "hash", req.Addr, "node", common.Bytes2Hex(d.overlay.BaseAddr()), "created", created) log.Debug("waiting delivery", "peer", sp.ID(), "hash", req.Addr, "node", common.Bytes2Hex(d.kad.BaseAddr()), "created", created)
start := time.Now() start := time.Now()
select { select {
case <-chunk.ReqC: case <-chunk.ReqC:
...@@ -269,8 +269,8 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, hash []byte, skipCheck ...@@ -269,8 +269,8 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, hash []byte, skipCheck
var err error var err error
requestFromPeersCount.Inc(1) requestFromPeersCount.Inc(1)
d.overlay.EachConn(hash, 255, func(p network.OverlayConn, po int, nn bool) bool { d.kad.EachConn(hash, 255, func(p *network.Peer, po int, nn bool) bool {
spId := p.(network.Peer).ID() spId := p.ID()
for _, p := range peersToSkip { for _, p := range peersToSkip {
if p == spId { if p == spId {
log.Trace("Delivery.RequestFromPeers: skip peer", "peer", spId) log.Trace("Delivery.RequestFromPeers: skip peer", "peer", spId)
......
...@@ -457,15 +457,10 @@ func testSyncingViaDirectSubscribe(chunkCount int, nodeCount int) error { ...@@ -457,15 +457,10 @@ func testSyncingViaDirectSubscribe(chunkCount int, nodeCount int) error {
//returns the number of subscriptions requested //returns the number of subscriptions requested
func startSyncing(r *Registry, conf *synctestConfig) (int, error) { func startSyncing(r *Registry, conf *synctestConfig) (int, error) {
var err error var err error
kad := r.delivery.kad
kad, ok := r.delivery.overlay.(*network.Kademlia)
if !ok {
return 0, fmt.Errorf("Not a Kademlia!")
}
subCnt := 0 subCnt := 0
//iterate over each bin and solicit needed subscription to bins //iterate over each bin and solicit needed subscription to bins
kad.EachBin(r.addr.Over(), pof, 0, func(conn network.OverlayConn, po int) bool { kad.EachBin(r.addr.Over(), pof, 0, func(conn *network.Peer, po int) bool {
//identify begin and start index of the bin(s) we want to subscribe to //identify begin and start index of the bin(s) we want to subscribe to
histRange := &Range{} histRange := &Range{}
......
...@@ -130,7 +130,7 @@ func NewRegistry(addr *network.BzzAddr, delivery *Delivery, db *storage.DBAPI, i ...@@ -130,7 +130,7 @@ func NewRegistry(addr *network.BzzAddr, delivery *Delivery, db *storage.DBAPI, i
// wait for kademlia table to be healthy // wait for kademlia table to be healthy
time.Sleep(options.SyncUpdateDelay) time.Sleep(options.SyncUpdateDelay)
kad := streamer.delivery.overlay.(*network.Kademlia) kad := streamer.delivery.kad
depthC := latestIntC(kad.NeighbourhoodDepthC()) depthC := latestIntC(kad.NeighbourhoodDepthC())
addressBookSizeC := latestIntC(kad.AddrCountC()) addressBookSizeC := latestIntC(kad.AddrCountC())
...@@ -398,9 +398,7 @@ func (r *Registry) Run(p *network.BzzPeer) error { ...@@ -398,9 +398,7 @@ func (r *Registry) Run(p *network.BzzPeer) error {
// and they are no longer required after iteration, request to Quit // and they are no longer required after iteration, request to Quit
// them will be send to appropriate peers. // them will be send to appropriate peers.
func (r *Registry) updateSyncing() { func (r *Registry) updateSyncing() {
// if overlay in not Kademlia, panic kad := r.delivery.kad
kad := r.delivery.overlay.(*network.Kademlia)
// map of all SYNC streams for all peers // map of all SYNC streams for all peers
// used at the and of the function to remove servers // used at the and of the function to remove servers
// that are not needed anymore // that are not needed anymore
...@@ -421,8 +419,7 @@ func (r *Registry) updateSyncing() { ...@@ -421,8 +419,7 @@ func (r *Registry) updateSyncing() {
r.peersMu.RUnlock() r.peersMu.RUnlock()
// request subscriptions for all nodes and bins // request subscriptions for all nodes and bins
kad.EachBin(r.addr.Over(), pot.DefaultPof(256), 0, func(conn network.OverlayConn, bin int) bool { kad.EachBin(r.addr.Over(), pot.DefaultPof(256), 0, func(p *network.Peer, bin int) bool {
p := conn.(network.Peer)
log.Debug(fmt.Sprintf("Requesting subscription by: registry %s from peer %s for bin: %d", r.addr.ID(), p.ID(), bin)) log.Debug(fmt.Sprintf("Requesting subscription by: registry %s from peer %s for bin: %d", r.addr.ID(), p.ID(), bin))
// bin is always less then 256 and it is safe to convert it to type uint8 // bin is always less then 256 and it is safe to convert it to type uint8
...@@ -461,10 +458,11 @@ func (r *Registry) updateSyncing() { ...@@ -461,10 +458,11 @@ func (r *Registry) updateSyncing() {
func (r *Registry) runProtocol(p *p2p.Peer, rw p2p.MsgReadWriter) error { func (r *Registry) runProtocol(p *p2p.Peer, rw p2p.MsgReadWriter) error {
peer := protocols.NewPeer(p, rw, Spec) peer := protocols.NewPeer(p, rw, Spec)
bzzPeer := network.NewBzzTestPeer(peer, r.addr) bp := network.NewBzzPeer(peer, r.addr)
r.delivery.overlay.On(bzzPeer) np := network.NewPeer(bp, r.delivery.kad)
defer r.delivery.overlay.Off(bzzPeer) r.delivery.kad.On(np)
return r.Run(bzzPeer) defer r.delivery.kad.Off(np)
return r.Run(bp)
} }
// HandleMsg is the message handler that delegates incoming messages // HandleMsg is the message handler that delegates incoming messages
......
...@@ -34,7 +34,6 @@ import ( ...@@ -34,7 +34,6 @@ import (
"github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/p2p/discover"
"github.com/ethereum/go-ethereum/p2p/simulations/adapters" "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
"github.com/ethereum/go-ethereum/swarm/api" "github.com/ethereum/go-ethereum/swarm/api"
"github.com/ethereum/go-ethereum/swarm/network"
"github.com/ethereum/go-ethereum/swarm/network/simulation" "github.com/ethereum/go-ethereum/swarm/network/simulation"
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
colorable "github.com/mattn/go-colorable" colorable "github.com/mattn/go-colorable"
...@@ -293,7 +292,7 @@ func testSwarmNetwork(t *testing.T, o *testSwarmNetworkOptions, steps ...testSwa ...@@ -293,7 +292,7 @@ func testSwarmNetwork(t *testing.T, o *testSwarmNetworkOptions, steps ...testSwa
if err != nil { if err != nil {
return nil, cleanup, err return nil, cleanup, err
} }
bucket.Store(simulation.BucketKeyKademlia, swarm.bzz.Hive.Overlay.(*network.Kademlia)) bucket.Store(simulation.BucketKeyKademlia, swarm.bzz.Hive.Kademlia)
log.Info("new swarm", "bzzKey", config.BzzKey, "baseAddr", fmt.Sprintf("%x", swarm.bzz.BaseAddr())) log.Info("new swarm", "bzzKey", config.BzzKey, "baseAddr", fmt.Sprintf("%x", swarm.bzz.BaseAddr()))
return swarm, cleanup, nil return swarm, cleanup, nil
}, },
......
...@@ -110,7 +110,7 @@ func (params *PssParams) WithPrivateKey(privatekey *ecdsa.PrivateKey) *PssParams ...@@ -110,7 +110,7 @@ func (params *PssParams) WithPrivateKey(privatekey *ecdsa.PrivateKey) *PssParams
// //
// Implements node.Service // Implements node.Service
type Pss struct { type Pss struct {
network.Overlay // we can get the overlayaddress from this *network.Kademlia // we can get the Kademlia address from this
privateKey *ecdsa.PrivateKey // pss can have it's own independent key privateKey *ecdsa.PrivateKey // pss can have it's own independent key
w *whisper.Whisper // key and encryption backend w *whisper.Whisper // key and encryption backend
auxAPIs []rpc.API // builtins (handshake, test) can add APIs auxAPIs []rpc.API // builtins (handshake, test) can add APIs
...@@ -151,9 +151,9 @@ func (p *Pss) String() string { ...@@ -151,9 +151,9 @@ func (p *Pss) String() string {
// Creates a new Pss instance. // Creates a new Pss instance.
// //
// In addition to params, it takes a swarm network overlay // In addition to params, it takes a swarm network Kademlia
// and a FileStore storage for message cache storage. // and a FileStore storage for message cache storage.
func NewPss(k network.Overlay, params *PssParams) (*Pss, error) { func NewPss(k *network.Kademlia, params *PssParams) (*Pss, error) {
if params.privateKey == nil { if params.privateKey == nil {
return nil, errors.New("missing private key for pss") return nil, errors.New("missing private key for pss")
} }
...@@ -162,7 +162,7 @@ func NewPss(k network.Overlay, params *PssParams) (*Pss, error) { ...@@ -162,7 +162,7 @@ func NewPss(k network.Overlay, params *PssParams) (*Pss, error) {
Version: pssVersion, Version: pssVersion,
} }
ps := &Pss{ ps := &Pss{
Overlay: k, Kademlia: k,
privateKey: params.privateKey, privateKey: params.privateKey,
w: whisper.New(&whisper.DefaultConfig), w: whisper.New(&whisper.DefaultConfig),
quitC: make(chan struct{}), quitC: make(chan struct{}),
...@@ -290,9 +290,9 @@ func (p *Pss) addAPI(api rpc.API) { ...@@ -290,9 +290,9 @@ func (p *Pss) addAPI(api rpc.API) {
p.auxAPIs = append(p.auxAPIs, api) p.auxAPIs = append(p.auxAPIs, api)
} }
// Returns the swarm overlay address of the pss node // Returns the swarm Kademlia address of the pss node
func (p *Pss) BaseAddr() []byte { func (p *Pss) BaseAddr() []byte {
return p.Overlay.BaseAddr() return p.Kademlia.BaseAddr()
} }
// Returns the pss node's public key // Returns the pss node's public key
...@@ -356,11 +356,11 @@ func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error { ...@@ -356,11 +356,11 @@ func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error {
} }
if int64(pssmsg.Expire) < time.Now().Unix() { if int64(pssmsg.Expire) < time.Now().Unix() {
metrics.GetOrRegisterCounter("pss.expire", nil).Inc(1) metrics.GetOrRegisterCounter("pss.expire", nil).Inc(1)
log.Warn("pss filtered expired message", "from", common.ToHex(p.Overlay.BaseAddr()), "to", common.ToHex(pssmsg.To)) log.Warn("pss filtered expired message", "from", common.ToHex(p.Kademlia.BaseAddr()), "to", common.ToHex(pssmsg.To))
return nil return nil
} }
if p.checkFwdCache(pssmsg) { if p.checkFwdCache(pssmsg) {
log.Trace("pss relay block-cache match (process)", "from", common.ToHex(p.Overlay.BaseAddr()), "to", (common.ToHex(pssmsg.To))) log.Trace("pss relay block-cache match (process)", "from", common.ToHex(p.Kademlia.BaseAddr()), "to", (common.ToHex(pssmsg.To)))
return nil return nil
} }
p.addFwdCache(pssmsg) p.addFwdCache(pssmsg)
...@@ -442,12 +442,12 @@ func (p *Pss) executeHandlers(topic Topic, payload []byte, from *PssAddress, asy ...@@ -442,12 +442,12 @@ func (p *Pss) executeHandlers(topic Topic, payload []byte, from *PssAddress, asy
// will return false if using partial address // will return false if using partial address
func (p *Pss) isSelfRecipient(msg *PssMsg) bool { func (p *Pss) isSelfRecipient(msg *PssMsg) bool {
return bytes.Equal(msg.To, p.Overlay.BaseAddr()) return bytes.Equal(msg.To, p.Kademlia.BaseAddr())
} }
// test match of leftmost bytes in given message to node's overlay address // test match of leftmost bytes in given message to node's Kademlia address
func (p *Pss) isSelfPossibleRecipient(msg *PssMsg) bool { func (p *Pss) isSelfPossibleRecipient(msg *PssMsg) bool {
local := p.Overlay.BaseAddr() local := p.Kademlia.BaseAddr()
return bytes.Equal(msg.To[:], local[:len(msg.To)]) return bytes.Equal(msg.To[:], local[:len(msg.To)])
} }
...@@ -816,14 +816,7 @@ func (p *Pss) forward(msg *PssMsg) error { ...@@ -816,14 +816,7 @@ func (p *Pss) forward(msg *PssMsg) error {
// send with kademlia // send with kademlia
// find the closest peer to the recipient and attempt to send // find the closest peer to the recipient and attempt to send
sent := 0 sent := 0
p.Overlay.EachConn(to, 256, func(op network.OverlayConn, po int, isproxbin bool) bool { p.Kademlia.EachConn(to, 256, func(sp *network.Peer, po int, isproxbin bool) bool {
// we need p2p.protocols.Peer.Send
// cast and resolve
sp, ok := op.(senderPeer)
if !ok {
log.Crit("Pss cannot use kademlia peer type")
return false
}
info := sp.Info() info := sp.Info()
// check if the peer is running pss // check if the peer is running pss
...@@ -840,7 +833,7 @@ func (p *Pss) forward(msg *PssMsg) error { ...@@ -840,7 +833,7 @@ func (p *Pss) forward(msg *PssMsg) error {
} }
// get the protocol peer from the forwarding peer cache // get the protocol peer from the forwarding peer cache
sendMsg := fmt.Sprintf("MSG TO %x FROM %x VIA %x", to, p.BaseAddr(), op.Address()) sendMsg := fmt.Sprintf("MSG TO %x FROM %x VIA %x", to, p.BaseAddr(), sp.Address())
p.fwdPoolMu.RLock() p.fwdPoolMu.RLock()
pp := p.fwdPool[sp.Info().ID] pp := p.fwdPool[sp.Info().ID]
p.fwdPoolMu.RUnlock() p.fwdPoolMu.RUnlock()
...@@ -859,11 +852,11 @@ func (p *Pss) forward(msg *PssMsg) error { ...@@ -859,11 +852,11 @@ func (p *Pss) forward(msg *PssMsg) error {
// - if the peer is end recipient but the full address has not been disclosed // - if the peer is end recipient but the full address has not been disclosed
// - if the peer address matches the partial address fully // - if the peer address matches the partial address fully
// - if the peer is in proxbin // - if the peer is in proxbin
if len(msg.To) < addressLength && bytes.Equal(msg.To, op.Address()[:len(msg.To)]) { if len(msg.To) < addressLength && bytes.Equal(msg.To, sp.Address()[:len(msg.To)]) {
log.Trace(fmt.Sprintf("Pss keep forwarding: Partial address + full partial match")) log.Trace(fmt.Sprintf("Pss keep forwarding: Partial address + full partial match"))
return true return true
} else if isproxbin { } else if isproxbin {
log.Trace(fmt.Sprintf("%x is in proxbin, keep forwarding", common.ToHex(op.Address()))) log.Trace(fmt.Sprintf("%x is in proxbin, keep forwarding", common.ToHex(sp.Address())))
return true return true
} }
// at this point we stop forwarding, and the state is as follows: // at this point we stop forwarding, and the state is as follows:
......
...@@ -556,23 +556,6 @@ OUTER: ...@@ -556,23 +556,6 @@ OUTER:
} }
} }
type pssTestPeer struct {
*protocols.Peer
addr []byte
}
func (t *pssTestPeer) Address() []byte {
return t.addr
}
func (t *pssTestPeer) Update(addr network.OverlayAddr) network.OverlayAddr {
return addr
}
func (t *pssTestPeer) Off() network.OverlayAddr {
return &pssTestPeer{}
}
// forwarding should skip peers that do not have matching pss capabilities // forwarding should skip peers that do not have matching pss capabilities
func TestMismatch(t *testing.T) { func TestMismatch(t *testing.T) {
...@@ -582,7 +565,7 @@ func TestMismatch(t *testing.T) { ...@@ -582,7 +565,7 @@ func TestMismatch(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
// initialize overlay // initialize kad
baseaddr := network.RandomAddr() baseaddr := network.RandomAddr()
kad := network.NewKademlia((baseaddr).Over(), network.NewKadParams()) kad := network.NewKademlia((baseaddr).Over(), network.NewKadParams())
rw := &p2p.MsgPipeRW{} rw := &p2p.MsgPipeRW{}
...@@ -594,10 +577,10 @@ func TestMismatch(t *testing.T) { ...@@ -594,10 +577,10 @@ func TestMismatch(t *testing.T) {
Version: 0, Version: 0,
} }
nid, _ := discover.HexID("0x01") nid, _ := discover.HexID("0x01")
wrongpsspeer := &pssTestPeer{ wrongpsspeer := network.NewPeer(&network.BzzPeer{
Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(wrongpssaddr.Over()), []p2p.Cap{wrongpsscap}), rw, nil), Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(wrongpssaddr.Over()), []p2p.Cap{wrongpsscap}), rw, nil),
addr: wrongpssaddr.Over(), BzzAddr: &network.BzzAddr{OAddr: wrongpssaddr.Over(), UAddr: nil},
} }, kad)
// one peer doesn't even have pss (boo!) // one peer doesn't even have pss (boo!)
nopssaddr := network.RandomAddr() nopssaddr := network.RandomAddr()
...@@ -606,16 +589,16 @@ func TestMismatch(t *testing.T) { ...@@ -606,16 +589,16 @@ func TestMismatch(t *testing.T) {
Version: 1, Version: 1,
} }
nid, _ = discover.HexID("0x02") nid, _ = discover.HexID("0x02")
nopsspeer := &pssTestPeer{ nopsspeer := network.NewPeer(&network.BzzPeer{
Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(nopssaddr.Over()), []p2p.Cap{nopsscap}), rw, nil), Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(nopssaddr.Over()), []p2p.Cap{nopsscap}), rw, nil),
addr: nopssaddr.Over(), BzzAddr: &network.BzzAddr{OAddr: nopssaddr.Over(), UAddr: nil},
} }, kad)
// add peers to kademlia and activate them // add peers to kademlia and activate them
// it's safe so don't check errors // it's safe so don't check errors
kad.Register([]network.OverlayAddr{wrongpsspeer}) kad.Register(wrongpsspeer.BzzAddr)
kad.On(wrongpsspeer) kad.On(wrongpsspeer)
kad.Register([]network.OverlayAddr{nopsspeer}) kad.Register(nopsspeer.BzzAddr)
kad.On(nopsspeer) kad.On(nopsspeer)
// create pss // create pss
...@@ -1636,17 +1619,17 @@ func newServices(allowRaw bool) adapters.Services { ...@@ -1636,17 +1619,17 @@ func newServices(allowRaw bool) adapters.Services {
} }
} }
func newTestPss(privkey *ecdsa.PrivateKey, overlay network.Overlay, ppextra *PssParams) *Pss { func newTestPss(privkey *ecdsa.PrivateKey, kad *network.Kademlia, ppextra *PssParams) *Pss {
var nid discover.NodeID var nid discover.NodeID
copy(nid[:], crypto.FromECDSAPub(&privkey.PublicKey)) copy(nid[:], crypto.FromECDSAPub(&privkey.PublicKey))
addr := network.NewAddrFromNodeID(nid) addr := network.NewAddrFromNodeID(nid)
// set up routing if kademlia is not passed to us // set up routing if kademlia is not passed to us
if overlay == nil { if kad == nil {
kp := network.NewKadParams() kp := network.NewKadParams()
kp.MinProxBinSize = 3 kp.MinProxBinSize = 3
overlay = network.NewKademlia(addr.Over(), kp) kad = network.NewKademlia(addr.Over(), kp)
} }
// create pss // create pss
...@@ -1654,7 +1637,7 @@ func newTestPss(privkey *ecdsa.PrivateKey, overlay network.Overlay, ppextra *Pss ...@@ -1654,7 +1637,7 @@ func newTestPss(privkey *ecdsa.PrivateKey, overlay network.Overlay, ppextra *Pss
if ppextra != nil { if ppextra != nil {
pp.SymKeyCacheCapacity = ppextra.SymKeyCacheCapacity pp.SymKeyCacheCapacity = ppextra.SymKeyCacheCapacity
} }
ps, err := NewPss(overlay, pp) ps, err := NewPss(kad, pp)
if err != nil { if err != nil {
return nil return nil
} }
......
...@@ -356,7 +356,7 @@ func (self *Swarm) Start(srv *p2p.Server) error { ...@@ -356,7 +356,7 @@ func (self *Swarm) Start(srv *p2p.Server) error {
log.Error("bzz failed", "err", err) log.Error("bzz failed", "err", err)
return err return err
} }
log.Info("Swarm network started", "bzzaddr", fmt.Sprintf("%x", self.bzz.Hive.Overlay.BaseAddr())) log.Info("Swarm network started", "bzzaddr", fmt.Sprintf("%x", self.bzz.Hive.BaseAddr()))
if self.ps != nil { if self.ps != nil {
self.ps.Start(srv) self.ps.Start(srv)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment