code: func (c *lesCommons) makeProtocols(versions []uint) []p2p.Protocol {
  	protos := make([]p2p.Protocol, len(versions))
  	for i, version := range versions {
  		version := version
  		protos[i] = p2p.Protocol{
  			Name:     "les",
  			Version:  version,
  			Length:   ProtocolLengths[version],
  			NodeInfo: c.nodeInfo,
  			Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
  				return c.protocolManager.runPeer(version, p, rw)
  			},
  			PeerInfo: func(id enode.ID) interface{} {
  				if p := c.protocolManager.peers.Peer(fmt.Sprintf("%x", id.Bytes())); p != nil {
  					return p.Info()
  				}
  				return nil
  			},
  		}
  	}
  	return protos
  }
docs: // makeProtocols creates protocol descriptors for the given LES versions.