code: func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool) {
  	b.mtx.Lock()
  	defer b.mtx.Unlock()
  	handshake, found := b.handshakes[peerID]
  	if !found {
  		handshake = &HandshakeMsg{
  			Version:   uint64(BzzSpec.Version),
  			NetworkID: b.NetworkID,
  			Addr:      b.localAddr,
  			LightNode: b.LightNode,
  			init:      make(chan bool, 1),
  			done:      make(chan struct{}),
  		}
  		// when handhsake is first created for a remote peer
  		// it is initialised with the init
  		handshake.init <- true
  		b.handshakes[peerID] = handshake
  	}
  
  	return handshake, found
  }
docs: // GetHandshake returns the bzz handhake that the remote peer with peerID sent