code: func (c *Client) AddPssPeer(pubkeyid string, addr []byte, spec *protocols.Spec) error {
  	topic := pss.ProtocolTopic(spec)
  	if c.peerPool[topic] == nil {
  		return errors.New("addpeer on unset topic")
  	}
  	if c.peerPool[topic][pubkeyid] == nil {
  		rw, err := c.newpssRPCRW(pubkeyid, addr, topic)
  		if err != nil {
  			return err
  		}
  		_, err = rw.handshake(handshakeRetryCount, true, true)
  		if err != nil {
  			return err
  		}
  		c.poolMu.Lock()
  		c.peerPool[topic][pubkeyid] = rw
  		c.poolMu.Unlock()
  		p := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%v", addr), []p2p.Cap{})
  		go c.protos[topic].Run(p, c.peerPool[topic][pubkeyid])
  	}
  	return nil
  }
docs: // Add a pss peer (public key) and run the protocol on it
  //
  // client.RunProtocol with matching topic must have been
  // run prior to adding the peer, or this method will
  // return an error.
  //
  // The key must exist in the key store of the pss node
  // before the peer is added. The method will return an error
  // if it is not.