code: func (b *Bzz) performHandshake(p *protocols.Peer, handshake *HandshakeMsg) error {
  	ctx, cancel := context.WithTimeout(context.Background(), bzzHandshakeTimeout)
  	defer func() {
  		close(handshake.done)
  		cancel()
  	}()
  	rsh, err := p.Handshake(ctx, handshake, b.checkHandshake)
  	if err != nil {
  		handshake.err = err
  		return err
  	}
  	handshake.peerAddr = rsh.(*HandshakeMsg).Addr
  	handshake.LightNode = rsh.(*HandshakeMsg).LightNode
  	return nil
  }
docs: // performHandshake implements the negotiation of the bzz handshake
  // shared among swarm subprotocols